2012-05-09 3 views
0

Я пытаюсь сохранить содержимое ArrayList в txt-файле, но когда я это сделаю, у меня появилось много нежелательных символов. Comma я могу иметь дело с string.replace(), но мне просто интересно, есть ли другой способ более эффективно фильтровать эти типы символов? особенно «¬í t [» в файле txt. Есть также другие символы, которые отображаются в приведенных выше кавычках, но это не позволит мне скопировать их здесь. Мой код для вывода в файл приведен ниже. Я добавляю несколько строк в ArrayList, но проблема, похоже, связана с самим списком массивов. Как показано ниже, я преобразовал список в строку и напечатал файл таким образом, как я, кажется, получаю меньше нежелательных символов. Любая помощь будет принята с благодарностью.Удаление нежелательных символов из arraylist? Java

String Output = ScanOutputList.toString(); 
FileOutputStream fstream = new FileOutputStream("Port_Scan.txt"); 
ObjectOutputStream ostream = new ObjectOutputStream(fstream); 

ostream.writeObject(Output); 
ostream.close(); 
+0

Что такое класс элементов внутри ArrayList? Получена ли функция toString()? – Luciano

+0

Единственный способ, о котором я могу думать, - это указать вам в своем коде точно, какие символы исключить, что может привести к написанию довольно длинного и неприятного утверждения if. Может быть проще указать, какие символы включать? –

+0

Кроме того, вместо записи строки, использующей ObjectOutputStream-> FileOutputStream, используйте FileWriter. Он может принимать String и записывать их в файл как есть (с использованием кодировки по умолчанию). – Luciano

ответ

0

Если некоторые символы Wierd ваша основная проблема, и вы просто хотите, чтобы избавиться от всего, что не «стандартного» характера, что вы могли бы сделать, это бросить ваши строки символьных массивов, а затем бросить эти символы в Интс , Если данный int слишком большой, удалите его. Наконец - воссоздайте свои строки из тех int, которые не были удалены.

0

Если вы хотите записать текст в файл (как указано расширением .txt), не используйте выходные потоки. Используйте записи:

FileWriter fw = null;

try { 
    fw = new FileWriter(file); 
    fw.print(StringUtils.join(collection, System.getProperty("line.separator"))); 
} 
finally { 
    IOUtils.closeQuietly(fw); 
} 

Я также не хотел бы использовать метод «ToString» в списке, так как он дает вам формат:

[ item1.toString(), item2.toString() ] 

Это лучше, чтобы положить вещи в формате, который вы хотите. Вышеприведенный код помещает 1 элемент в строку и помещает разрыв строки (зависящий от системы) между ними.

Как упоминалось выше, тип объекта в списке также очень важен, поскольку он использует метод «toString()» при записи объекта. Вы можете сделать собственный вывод, заменив StringUtils.join на цикл for и записывая именно то, что вы хотите в цикле.

+0

ps: Я предполагаю, что вы используете пакеты commons-lang и commons-io, в которых находятся классы StringUtils и IOUtils. – Matt

Смежные вопросы