Печать новой строки в файле на Java - PullRequest
3 голосов
/ 23 января 2012

Я стремлюсь сделать индекс всех файлов с определенным расширением и сохранить его в index.txt.Я получаю все правильные результаты, но не получаю «файлы» в новой строке, это снимок моего кода:

OutputStream f0 = new FileOutputStream("index.txt");
    String ind[] = f.list(only); // logic for getting only relevant files
        for(int i=0;i<ind.length;i++)
        {
            File n = new File(path + "/" +ind[i]);
                System.out.println(ind[i]+ " is a " +exten +" file");
                ind[i]+="\n";           // doesnt work      
                f0.write(ind[i].getBytes());    // here i am writing the filenames                              
        }           

это из-за функции getBytes (), которая пропускает "/н "?Пожалуйста, скажи мне, что делать.Я хочу вставлять новую строку каждый раз, когда выхожу из цикла for.

Одно важное изменение: я получаю желаемый результат, когда открываю файл с помощью notepad ++ или wordpad, но когда я открываю файл с помощью блокнота, яполучать результаты на одной линии.Пожалуйста, объясните это тоже!

Ответы [ 5 ]

5 голосов
/ 23 января 2012

Попробуйте написать:

System.getProperty("line.separator") 

вместо \ n

2 голосов
/ 23 января 2012

Здесь отсутствует предположение.

  1. Если вы предполагаете, что ваш текстовый файл должен иметь MS Windows разделители строк (предназначенные для платформ Windows), то вам следует использовать \r\n.
  2. Если вы предполагаете, что ваш текстовый файл должен иметь Unix-подобные разделители строк (предназначены для GNU / Linux, AIX, Xenix, Mac OS X, FreeBSD и т. Д.),тогда вы должны использовать \n.
  3. Если вы предполагаете, что ваш текстовый файл должен иметь Mac oldschool разделители строк (предназначено для Mac OS до версии 9, семейства Apple II, OS-9и т. д.), тогда вы должны использовать \r.
  4. Если вы предполагаете, что в вашем текстовом файле должны быть разделители строк типа платформы, из которой ваша программа run from, то выследует использовать System.getProperty("line.separator") (или напечатать новую строку с .println()).
2 голосов
/ 23 января 2012

Вместо использования FileOutputStream я бы использовал PrintWriter.

PrintWriter out = new PrintWriter("index.txt");
String ind[] = f.list(only); // logic for getting only relevant files
for(int i=0;i<ind.length;i++)
{
    File n = new File(path + "/" +ind[i]);
    System.out.println(ind[i]+ " is a " +exten +" file");
    out.println(ind[i]);   
}
1 голос
/ 23 января 2012

попробуйте,

FileWriter.write("\r\n");
1 голос
/ 23 января 2012

Есть ли причина, по которой вы работаете с таким низким уровнем ввода-вывода в Java? Прежде всего вы должны использовать Writers вместо OutputStreams.

И затем, если вы используете PrintWriter, вы можете покончить с частью getBytes:

PrintWriter f0 = new PrintWriter (новый FileWriter ("index.txt"));

А потом позже ...

f0.print (Ind [I]);

И, наконец, на ваш вопрос, вне цикла просто

f0.println ();

...