用Java在Windows和Mac上读写文件到project中的包
我很抱歉,如果这已经张贴过 我试图做的是将一个简单的字符串写入并读取到项目中某个包中的文件中。在源代码包中,我有一个名为“resources”的包。在这里,我想读取一个名为用Java在Windows和Mac上读写文件到project中的包,java,windows,macos,file,persistence,Java,Windows,Macos,File,Persistence,我很抱歉,如果这已经张贴过 我试图做的是将一个简单的字符串写入并读取到项目中某个包中的文件中。在源代码包中,我有一个名为“resources”的包。在这里,我想读取一个名为myfile.txt的文件,对它做一些处理,然后将它再次保存为newmyfile.txt。只需简单地读取和存储CSV数据 我创建了一个读卡器,如下所示: public BufferedReader getFileReader(String fileNameWithExtension, String sourcePackage)
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上文件存储的新手,我感到困惑
还有很多读写文件的方法,我不知道选择什么方法,为什么
对于我来说,在我只想保存一个长字符串或字符串数组的情况下读取和创建文件的最佳方法是什么?关键是绝对路径总是以“/”开头。
相对路径不能以“/”开头。这至少是给你带来麻烦的部分原因
剩下的,你说“它不起作用”。但是什么不起作用呢?我一直忙于其他事情,但现在,在您的帮助下,我找到了一个在mac和windows上工作的解决方案 出于某种奇怪的原因,
String file=“/”+sourcePackage+“/”+fileNameWithExtension
是唯一可以在我的mac上阅读的东西。突然(没有代码更改)它也开始在windows上工作。我不知道为什么。因此,现在获取读取器的工作代码是:
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;
}
}
为了写入Resources文件夹中的文件,我使用了:
public BufferedWriter getFileWriter(String fileNameWithExtension, String sourcePackage) {
Writer output = null;
File file = new File("src" + File.separator + sourcePackage + File.separator + fileNameWithExtension);
try {
output = new BufferedWriter(new FileWriter(file));
return (BufferedWriter) output;
} catch (IOException ex) {
Logger.getLogger(FileHelper.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
遗憾的是,获取
读取器
的方法与获取编写器
的方法不同,但它可以工作。在Java的windows上使用前向斜杠可以很好地工作。当您还需要驱动器号之类的东西时,事情会变得更加复杂……”在我的项目中的一个包中写入并读取一个简单字符串到一个文件中。“包通常部署在JAR中。在这一点上,没有现实的选择回信给他们。请参阅以获取替代策略。如果您使用Eclipse或其他IDE,则说明您在文件位置方面有问题。“我发现我必须使用file.separator”否!!使用getResource(String)
时不可用。它总是使用正斜杠。你的意思是他不能使用File.separator,因为它可以与getResource(String)一起使用,但不能与getResourceAsStream(String)一起使用。我对吗?如果我错了,请更正我。然后在“c:/Path/Textfile.txt”前面加一个“/”?我在代码中使用了“String file=“/”+sourcePackage+“/”+fileNameWithExtension;”,这是一个相对路径,但前面有“/”,它可以工作。这是歧义,还是通过解析的方式消除了歧义?如果在Mac电脑上也能做到这一点,我会感到惊讶。它当然应该在没有“/”的情况下工作,这样也更便于携带。