我想将ArrayList
(projects
)中的对象作为字符串打印到文件中。它们当前存储为“项目”,在不同的类中定义。
当我使用System.out.print
而不是outputStream.print
时,它工作正常,信息按预期显示。只要我想要它在文件中,文件就不会出现。
import java.io.PrintWriter;
import java.util.ArrayList;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
public class FileController
{
public static void finish(ArrayList<Project> projects)
{
PrintWriter outputStream = null;
try
{
outputStream = new PrintWriter(new FileOutputStream("project.txt"));
}
catch (FileNotFoundException e)
{
System.out.println("Error opening the file stuff.txt.");
System.exit(0);
}
System.out.println("Writing to file");
for(int i = 0; i < projects.size(); i++)
{
//System.out.print(projects.get(i) + "," + projects.get(i).teamVotes);
outputStream.println(projects.get(i) + "," + projects.get(i).teamVotes);
}
outputStream.close();
System.out.println("End of Program");
}
}
答案 0 :(得分:0)
我确定文件在某处,您的代码没有错误。至少,我没有看到任何。也许您需要调用outputStream.flush()
,因为您使用的构造函数使用来自给定OutputStream
的自动行刷新,请参阅documentation。但afaik关闭流将自动刷新。
您的路径"project.txt"
是相对的,因此该文件将放置在您的代码执行位置。通常,它靠近.class
文件,检查项目中的所有文件夹。
你也可以试试像
这样的绝对路径System.getProperty("user.home") + "/Desktop/projects.txt"
然后你会很容易找到该文件。
无论如何,你应该使用Javas NIO 来编写和阅读文件。它围绕着课程Files,Paths和Path。然后代码可能看起来像
// Prepare the lines to write
List<String> lines = projects.stream()
.map(p -> p + "," + p.teamVotes)
.collect(Collectors.toList());
// Write it to file
Path path = Paths.get("project.txt");
Files.write(path, lines);
,这很容易。