我怎样才能使用相对文件名而不是绝对文件名?

时间:2014-12-19 20:18:44

标签: java file file-io

我让我的程序读取.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"

5 个答案:

答案 0 :(得分:3)

更改此

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”附加到该路径。

答案 1 :(得分:1)

你可以

  1. 将文件名作为参数传递
  2. 您可以使用getResourceAsStream().
  3. 从.class文件加载相同目录中的文件
  4. System.getProperty("user.dir")返回当前目录

答案 2 :(得分:1)

他们说了什么,另外还有一些用于在文件夹级别上下导航的其他有用技巧:

//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;

答案 3 :(得分:0)

使用相对文件路径与您当前所在的路径有关。只需在此猜测,但请尝试&#34; Documents / FourLetterWords.txt&#34;。

如果可行,原因是因为您当前的目录是&#34; C:\ Users \ Phil&#34;

如果没有尝试

System.out.println("Working Directory = " + System.getProperty("user.dir"));

然后尝试将文件移到那里以便能够使用&#34; FourLetterWords.txt&#34;。

答案 4 :(得分:0)

Java或任何编程语言有两种文件访问方案:

一个。该文件存在于项目目录中。
湾文件不在项目目录中。

a。项目目录中的文件:

文件存在捆绑或推送到项目目录中的文件夹。在这种情况下,你可以使用一些东西
String fileName = "/resourceFolder/FourLetterWords.txt";

资源文件夹是项目根文件夹的子文件。

湾文件出现在项目目录外的位置

您需要拥有一个属性集,该属性集始终具有您将拥有该文件的路径。您需要将其设置为env的一部分,以便代码始终在所有操作系统上运行。您还可以将其设置为属性文件的一部分,该文件将针对每个操作系统进行更改。

获取系统变量:{​​{1}}
获得财产:System.getEnv("FILE_DIR");