【发布时间】:2012-11-09 09:08:41
【问题描述】:
如果之前已经发布过,我很抱歉。
我要做的是将一个简单的字符串写入和读取到位于我项目中的一个包中的文件。在源代码包中,我有一个名为“资源”的包。在这里,我想读取一个名为myfile.txt 的文件,用它做一些事情并再次将其保存为newmyfile.txt。只是简单地读取和存储 CSV 数据。
我创建了一个阅读器,如下所示:
public BufferedReader getFileReader(String fileNameWithExtension, String sourcePackage) {
try {
String file = "/" + sourcePackage + "/" + fileNameWithExtension;
BufferedReader br = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(file)));
return br;
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
return null;
}
}
这在我的 Mac 上运行良好。阅读这个我发现我必须使用 File.separator 才能让它在所有操作系统上工作。所以我改变了这个,但它仍然不起作用。在某处据说相对路径总是以/ 开头,而与使用相对路径时的操作系统无关,而在其他地方则以../ 开头。作为一个 Java 文件存储的新手,我很困惑。
读写文件的方法也有很多,不知道该选择什么方法,为什么。
对我来说,读取和创建文件的最佳方式是保存一个长字符串或一组字符串?
【问题讨论】:
-
在 Java 的窗口上使用正斜杠可以正常工作。当您还需要驱动器号之类的东西时,事情会变得更加复杂......
-
"写入并将一个简单的字符串读取到位于我项目中的一个包中的文件中。" 包通常部署在 Jars 中。那时,没有现实的选择可以回信给他们。请参阅this answer 了解替代策略。
-
如果您使用 Eclipse 或其他 IDE。您的文件位置有问题。
-
“我发现我必须使用 File.separator” 不!使用
getResource(String)时不会。它总是向前斜线。 -
你的意思是他不能使用 File.separator,因为它可以与 getResource(String) 一起使用,但不能与 getResourceAsStream(String) 一起使用。我对吗?如果我错了,请纠正我。跨度>
标签: java windows macos file persistence