[英]How can I just use the relative file name instead of the absolute file name?
我正在让我的程序读取.txt文件,我不想使用绝对文件名,因为它取决于机器,我只想使用相对文件名。 我不知道如何做到这一点。 这是我正在讨论的程序的一部分:
private List<String> readFile() {
List<String> wordsList = new ArrayList<>();
try {
String fileName = "C:/Users/Phil/Documents/FourLetterWords.txt";
File fourLetterWords = new File(fileName);
Scanner in = new Scanner(fourLetterWords);
while (in.hasNextLine()) {
String line = in.nextLine();
if (line!=null && !line.isEmpty()) {
wordsList.add(line);
}
}
}
catch (FileNotFoundException ex) {
System.out.println("File not found.");
}
return wordsList ;
}
如果我只是这样做:
"C:/FourLetterWords.txt"
然后我的捕获异常进来并说File找不到。 但我真的只想用...
"FourLetterWords.txt"
改变这个
String fileName = "C:/Users/Phil/Documents/FourLetterWords.txt";
喜欢的东西
File f = new File(System.getProperty("user.home"),
"Documents/FourLetterWords.txt");
这将在Java支持的每个平台上获得“user.home”,然后将“Documents / FourLetterWords.txt”附加到该路径。
你也可以
getResourceAsStream().
从与.class文件相同的目录加载文件getResourceAsStream().
System.getProperty("user.dir")
返回当前目录 他们说了什么,加上这里有一些额外的有用技巧,用于在文件夹级别上下导航:
//absolute path from where application has initialized
String target = System.getProperty("user.dir");
//drop the last folder to go down one level
target = target.substring(0, target.lastIndexOf(File.separator));
//go into another directory
target = target + File.separator + targetFolder;
//use it
return target;
使用相对文件路径与您当前所在的路径有关。只需在此猜测,但请尝试“Documents / FourLetterWords.txt”。
如果这样可行,原因是因为您当前的目录是“C:\\ Users \\ Phil”
如果不试试
System.out.println("Working Directory = " + System.getProperty("user.dir"));
然后尝试移动文件,以便能够使用“FourLetterWords.txt”。
Java或任何编程语言有两种文件访问方案:
一个。 该文件存在于项目目录中。
湾 文件不在项目目录中。
一个。 项目目录中的文件:
文件存在捆绑或推送到项目目录中的文件夹。 在这种情况下,你可以使用一些东西
String fileName = "/resourceFolder/FourLetterWords.txt";
资源文件夹是项目根文件夹的子项。
湾 文件出现在项目目录之外的位置
您需要拥有一个属性集,该属性集始终具有您将拥有该文件的路径。 您需要将其设置为env的一部分,以便代码始终在所有操作系统上运行。 您还可以将其设置为属性文件的一部分,该文件将针对每个操作系统进行更改。
获取系统变量: System.getEnv("FILE_DIR");
获取属性: System.getProperty("file.dir");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.