Java сохранить многострочную строку в текстовый файл - PullRequest
2 голосов
/ 10 марта 2011

Я новичок в Java и пытаюсь сохранить многострочную строку в текстовом файле.

Прямо сейчас, это работает в моем приложении.Например, если я сохраню файл из своего приложения, а затем открою его из своего приложения, он вставит пробел между строками.Однако, если я сохраню файл из своего приложения и затем открою его в блокноте, он будет отображаться в одной строке.

Есть ли способ заставить его показывать несколько строк во всех программах?Вот мой текущий код:

public static void saveFile(String contents) {

    // Get where the person wants to save the file
    JFileChooser fc = new JFileChooser();

    int rval = fc.showSaveDialog(fc);

        if(rval == JFileChooser.APPROVE_OPTION) {

            File file = fc.getSelectedFile();

            try {
                //File out_file = new File(file);
                BufferedWriter out = new BufferedWriter(new FileWriter(file));
                out.write(contents);
                out.flush();
                out.close();
            } catch(IOException e) {
                messageUtilities.errorMessage("There was an error saving your file. IOException was thrown.", "File Error");
            }
        }

        else {
            // Do nothing
            System.out.println("The user choose not to save anything");
        }
}

Ответы [ 4 ]

4 голосов
/ 10 марта 2011

В зависимости от того, как вы строите свою строку, вы можете столкнуться с проблемой окончания строки.Блокнот не поддерживает окончания строк Unix (только \ n), он поддерживает только окончания строк Windows (\ n \ r).попробуйте открыть сохраненный файл с помощью более надежного редактора и / или убедитесь, что вы используете правильные окончания строк для вашей платформы.Системное свойство java (System.getProperty ("line.separator")) даст вам правильное окончание строки для платформы, на которой выполняется код.

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

какитак:

String eol = System.getProperty("line.separator");

... somewhere else in your code ...

String texttosave = "Here is a line of text." + eol;

... more code.. optionally adding lines of text .....
// call your save file method
saveFile(texttosave);
0 голосов
/ 01 декабря 2014

У меня была такая же проблема, мой друг, после долгих размышлений и исследований я даже нашел решение.

Вы можете использовать ArrayList, чтобы поместить все содержимое TextArea в качестве примера, и отправить в качестве параметра с помощьювызывая save, так как писатель только что записал строковые строки, затем мы построчно используем «for», чтобы записать наш ArrayList, в конце мы будем использовать содержимое TextArea в текстовом файле.если что-то не имеет смысла, извините, Google переводчик и я, кто не говорит по-английски.

Посмотрите Блокнот Windows, он не всегда переходит строки и показывает все в одной строке, используйте Wordpad нормально.


private void SaveActionPerformed (java.awt.event.ActionEvent evt) {

    String NameFile = Name.getText();
    ArrayList< String > Text = new ArrayList< String >();

    Text.add(TextArea.getText());

    SaveFile(NameFile, Text);
} 

public void SaveFile (имя строки, сообщение ArrayList ) {

    path = "C:\\Users\\Paulo Brito\\Desktop\\" + name + ".txt";

    File file1 = new File(path);

    try {

        if (!file1.exists()) {

            file1.createNewFile();
        }


        File[] files = file1.listFiles();


        FileWriter fw = new FileWriter(file1, true);

        BufferedWriter bw = new BufferedWriter(fw);

        for (int i = 0; i < message.size(); i++) {

            bw.write(message.get(i));
            bw.newLine();
        }

        bw.close();
        fw.close();

        FileReader fr = new FileReader(file1);

        BufferedReader br = new BufferedReader(fr);

        fw = new FileWriter(file1, true);

        bw = new BufferedWriter(fw);

        while (br.ready()) {

            String line = br.readLine();

            System.out.println(line);

            bw.write(line);
            bw.newLine();

        }
        br.close();
        fr.close();

    } catch (IOException ex) {
        ex.printStackTrace();
        JOptionPane.showMessageDialog(null, "Error in" + ex);        
}
0 голосов
/ 10 марта 2011

Вы можете добавить что-то вроде:

contents = contents.replaceAll("\\n","\\n\\r");

, если блокнот отображается неправильно. Однако вы можете столкнуться с другой проблемой: при каждом сохранении / загрузке вы получите несколько символов \ r. Затем, чтобы избежать этого при загрузке, вам придется вызывать тот же код выше, но с обратными параметрами. Это действительно уродливое решение, просто чтобы текст правильно отображался в блокноте.

0 голосов
/ 10 марта 2011

Да, в предыдущем ответе упоминается System.getProperty ("line.seperator").

ваш код не показывает, как вы создали содержимое String, но так как вы сказали, что вы новичок в java, я подумал, что упомяну, что в java конкатенация строк не очень хороша, так как она создает. Если вы строите строку, выполнив это:

String contents = ""
contents = contents + "sometext" + "some more text\n"

Тогда рассмотрите возможность использования java.lang.StrinBuilder вместо

StringBuilder strBuilder = new StringBuilder();
strBuilder.append("sometext").append("somre more text\n");
...
String contents = strBuilder.toString();

Другой альтернативой является потоковая передача того, что вы планируете записать в файл, а не создание большой строки с последующим выводом.

...