новая строка не вставлена - PullRequest
1 голос
/ 24 мая 2011

Это фрагмент:

String s1=new String("127.0.0.1 www.google.com127.0.0.1 www.bing.com");
String s2=new String("127.0.0.1 www.google.com" + "\n" + "127.0.0.1 www.bing.com");
byte buffer1[]=s1.getBytes();
byte buffer2[]=s2.getBytes();
FileOutputStream fos=new FileOutputStream("f1.txt");
for(int i=0;i<buffer1.length;i++)
fos.write(buffer1[i]);
FileOutputStream fos2=new FileOutputStream("f2.txt");
for(int i=0;i<buffer2.length;i++)
fos2.write(buffer2[i]);
System.out.println("size of buffer1 = "+buffer1.length);
System.out.println("\nsize of buffer2 = "+buffer2.length);
String x=new String("s"+"\n"+"u");
System.out.println(x);

Я получаю 2 файла с именами f1.txt и f2.txt в моем текущем каталоге, но я ожидаю, что 127.0.0.1 www.bing.com будет в новой строке в f2.txt, но это происходит в той же строке (т. Е. Файл такой же как f1.txt).

Почему я не получаю новую строку в f2.txt, когда вставляю символ новой строки в конструктор String?

Ответы [ 4 ]

5 голосов
/ 24 мая 2011

Не используйте \n или подобные вещи для новых строк - это зависит от платформы.

Использование System.getProperty("line.separator")

2 голосов
/ 24 мая 2011

Попробуйте выяснить, каким должен быть разделитель. Вы можете попробовать \r\n например. В Linux и Windows различаются символы, используемые для «новой строки» (перевод строки и возврат каретки)

(возврат каретки означает, что курсор переходит на первый символ, перевод строки означает, что курсор переходит на «одну строку вниз». В зависимости от того, что делает ваша ОС, вам нужен один или оба)

2 голосов
/ 24 мая 2011

Я не уверен, на какой платформе вы работаете, но в Eclipse Galileo в Ubuntu это работает именно так, как и ожидалось.

код:

import java.io.FileOutputStream;
public class Find {
    public static void main(String args[]) {
        try {
            String s1=new String("127.0.0.1 www.google.com127.0.0.1 www.bing.com");
            String s2=new String("127.0.0.1 www.google.com" + "\n" +
                "127.0.0.1 www.bing.com");

            byte buffer1[]=s1.getBytes();
            byte buffer2[]=s2.getBytes();

            FileOutputStream fos=new FileOutputStream("f1.txt");
            for(int i=0;i<buffer1.length;i++)
                fos.write(buffer1[i]);

            FileOutputStream fos2=new FileOutputStream("f2.txt");
            for(int i=0;i<buffer2.length;i++)
                fos2.write(buffer2[i]);

            System.out.println("size of buffer1 = "+buffer1.length);
            System.out.println("size of buffer2 = "+buffer2.length);

            String x=new String("s"+"\n"+"u");
            System.out.println(x);
        } catch (Exception e) {}
    }
}

выходы:

size of buffer1 = 46
size of buffer2 = 47
s
u

и два файла отличаются:

f1.txt:
    127.0.0.1 www.google.com127.0.0.1 www.bing.com
f2.txt:
    127.0.0.1 www.google.com
    127.0.0.1 www.bing.com

Если вы используете операционную систему, которая не использует \n в качестве разделителя строк (например, Windows), вы все равно получите тот же вывод, но инструменты, которые вы используете для look в этом файле (или обработать его) может работать не так, как ожидалось. Если вы замените \n на \r\n, вы, вероятно, найдете другие инструменты, которые отлично работают для Windows.

Но для переносимости используйте свойство line.separator вместо \n (или \r\n) напрямую:

String s2=new String("127.0.0.1 www.google.com" +
    System.getProperty("line.separator") +
    "127.0.0.1 www.bing.com");
0 голосов
/ 24 мая 2011

Использовать Printstream поверх fileoutputstream:

FileOutputStream f = new FileOutputStream("f2.txt");
PrintStream ps = new PrintStream(f);
ps.print("127.0.0.1 www.google.com");
ps.println(); //this writes your new line
ps.print("127.0.0.1 www.bing.com");
ps.close();

ссылка: Как написать новую строку с помощью FileOutputStream

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...