【问题标题】:No such file or directory found even though the file is in the same package即使文件在同一个包中,也找不到这样的文件或目录
【发布时间】:2019-07-29 18:34:23
【问题描述】:

我正在尝试使用 String 类的 split 方法将 "loremIpsum.txt" 文件扫描到 String 以将每个单词存储在数组的不同位置,最后使用 HashSet 查找是否有任何单词重复文本。

但 Eclipse 无法识别该文件,即使它位于同一个包中。我想知道我的代码是否有问题?

package Lab5;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashSet;
import java.util.Scanner;

public class Lorem {

    public static void main(String[] args) {
        String[] loremIpsum = null;
        try {
            loremIpsum = new Scanner(new File("loremIpsum.txt")).next().split(" ");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        System.out.println(loremIpsum.length);
        HashSet h = new HashSet();

        for(int i=0;i<loremIpsum.length;i++) {
            String word=loremIpsum[i];
            System.out.println(word);
            if(h.contains(word)) {
                System.out.println("we found a duplicate");
            } else {
                h.add(word);
            }   
        }

    }

}

错误信息和证明“lorem.txt”在同一个包中:

【问题讨论】:

  • 旁注:Scanner#next 使用空格作为默认分隔符,因此调用 split(" ") 将生成大小为 1 或可能为 0 的字符串数组。您应该使用 Scanner#nextLinesplit(" ")
  • 可能是 XY 问题而不是重复问题。对于刚开始的 Java 练习,似乎问题可能更多在于假定文本文件与代码位于同一目录中,而不是如何完成。

标签: java split java.util.scanner hashset lorem-ipsum


【解决方案1】:

当您使用相对路径调用 File 构造函数时,它是相对于工作目录的。

这通常与调用构造函数的代码不在同一个目录。但这没关系,因为如果您的文件可以在您运行应用程序时指定,那么您无论如何都不想假设。

您可以在 Eclipse 运行配置中的 Arguments 选项卡上指定工作目录。

您可以看到如何使用 File 方法 getAbsolutePath() 解析相对路径。

   try {
        File myFile = new File("loremIpsum.txt");
        System.out.println("Absolute path = " + myFile.getAbsolutePath() );

        loremIpsum = new Scanner(myFile).next().split(" ");
        ...

【讨论】:

    【解决方案2】:

    您需要将参数作为路径传递。

    试试这个

    String path = new File("").getAbsolutePath();
    
    path.concat("/loremIpsum.txt");
    
    loremIpsum = new Scanner(new File(path)).next().split(" ");
    

    基本上你只是找到当前路径并附加你想要读取的文件名。 就像其他人说的那样,您也可以将其移至您的工作目录。

    干杯!

    【讨论】:

    • 前两个语句似乎是完成与new File("loremIpsum.txt")相同任务的一种相当迂回的方式。
    【解决方案3】:

    将在项目目录(binsrc 文件夹所在的位置)中查找该文件。将文件移到那里。

    【讨论】:

      猜你喜欢
      • 2016-02-09
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      相关资源
      最近更新 更多