Запись массива в файл на Java - PullRequest
1 голос
/ 28 апреля 2011

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

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

Пример, который нужно попытаться объяснить:

Содержимое массива: test, test2, test3, test4

Запись в файл

Содержимое файла: test test2 test3 test4

В то время как я хочу, чтобы файл был: test test2 test3 test3 * test4

Ниже представлен сегментмоего кода для записи в файл.

    public void save(String fileName) throws FileNotFoundException {

    try {

        BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
        for ( int i = 0; i < nbrMovies; i++)
        {      
        writer.write(movies[i].getName() + " \n");
        }
        writer.close();
    } catch(IOException ex) {
        ex.printStackTrace();
    }
}

Файл не принимает команду "\ n" и вместо этого просто ставит небольшую рамку рядом с последним добавленным фильмом.

Любая помощь будет принята с благодарностью.

Ответы [ 8 ]

3 голосов
/ 28 апреля 2011

Прежде всего, вы не должны close() поток после каждой записи;переместите close() за пределы вашего цикла, предпочтительно в блок finally, чтобы убедиться, что он вызывается.Во-вторых, вместо написания «\ n» лучше использовать

writer.write(movies[i].getName());
writer.newLine();
writer.flush(); //optional
3 голосов
/ 28 апреля 2011

Возьмите writer.close(); из цикла for.Ваш код должен быть таким: -

 public void save(String fileName) throws FileNotFoundException {
    BufferedWriter writer = null;
    try {

        writer = new BufferedWriter(new FileWriter(fileName));
        for ( int i = 0; i < nbrMovies; i++)
        {      
          writer.write(movies[i].getName());
          writer.newLine();
      writer.flush();
        }

    } catch(IOException ex) {
        ex.printStackTrace();
    } finally{
        if(writer!=null){
            writer.close();
        }  
    }
}
1 голос
/ 08 апреля 2013
import java.io.*;

public class WriteChar 
{

    public static void main(String[] args) 
    {

        try
    {
       File f=new File("WriteChar.txt");
      char c[]={'a','b','c','d','e','f','g'};


       FileWriter out=new FileWriter(f);
       out.write(c);
       System.out.println("Done ..........");
       out.close();
    }

        catch(IOException ioe)
        {
            ioe.printStackTrace();
        }
    }

}
1 голос
/ 28 апреля 2011

Есть это writer.newLine(); и переместите вызов для закрытия из цикла.

0 голосов
/ 27 сентября 2012

Я согласен с перемещением writer.close () вне цикла.Но есть более простой способ сделать то, что вы хотите - вместо вызова функции новой строки, просто добавьте возврат каретки вместо возврата в конце оператора, т.е.

измените оператор: writer.write(movies[i].getName() + " \n"); на: writer.write(movies[i].getName() + " \r\n");

0 голосов
/ 28 апреля 2011

Почему бы вам не позвонить close вне цикла?

Writer writer = null;
try {
    writer = new BufferedWriter(new FileWriter(fileName));
    for (Movie movie : movies) {      
        writer.write(movie.getName() + " \n");
    }
} catch(IOException ex) {
    ex.printStackTrace();
} finally {
    if (writer != null) {
        try {
            writer.close();
        } catch (IOException ignored) {
        }
    }
}
0 голосов
/ 28 апреля 2011

Переместите writer.close() за пределы цикла.Кроме того, убедитесь, что вы очистили устройство записи перед тем, как закрыть его.

0 голосов
/ 28 апреля 2011

Оберните FileWriter или BufferedWriter с помощью PrintWriter, и вы получите доступ к методу println (...).

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