嗨,我已经看过所有其他类似的问题,我可以找到并且无法解决我的上一个问题,尽管其他问题的答案让我走得很远。
我正在尝试将数组写入文件,到目前为止我可以这样做,但作者只是将所有内容都写在同一行上。出于某种原因,在记事本中查看时,它不会接受我的新行命令(\ n)。
尝试解释的一个例子:
数组内容:test,test2,test3,test4
写入文件
文件内容:test test2 test3 test4
我希望文件是: 测试 TEST2 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”命令,只是在最后添加的电影旁放置一个小框。
非常感谢任何和所有帮助。
答案 0 :(得分:3)
将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 :(得分:3)
首先,每次写入后都不应该close()
流;将close()
移到循环外部,最好移到finally
块中以确保它被调用。其次,不是写“\ n”,而是采用更好的方法
writer.write(movies[i].getName());
writer.newLine();
writer.flush(); //optional
答案 2 :(得分:1)
有writer.newLine();
并将调用移出闭环。
答案 3 :(得分:1)
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();
}
}
}
答案 4 :(得分:0)
使用PrintWriter包装FileWriter或BufferedWriter,您将可以访问println(...)方法。
答案 5 :(得分:0)
将writer.close()
移到循环外部。另外,请确保在关闭之前刷新写入器。
答案 6 :(得分:0)
为什么不在循环外调用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) {
}
}
}
答案 7 :(得分:0)
我同意在循环外移动writer.close()。但是有一种更简单的方法可以做你想要的 - 而不是调用换行函数,只需在语句末尾追加回车而不是返回 即
更改声明:writer.write(movies[i].getName() + " \n");
致:writer.write(movies[i].getName() + " \r\n");