如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径

时间:2010-10-02 03:50:41

标签: java file

我有一个包含2个包的项目:

  1. tkorg.idrs.core.searchengines
  2. tkorg.idrs.core.searchengines
  3. 在包(2)中,我有一个文本文件ListStopWords.txt,在包(1)中我有一个类FileLoadder。以下是FileLoader中的代码:

    File file = new File("properties\\files\\ListStopWords.txt");
    

    但是有这个错误:

    The system cannot find the path specified
    

    你能解决一下吗?感谢。

15 个答案:

答案 0 :(得分:145)

如果它已经在类路径中,那么只需从类路径中获取它。不要在java.io.File中摆弄相对路径。它们依赖于当前的工作目录,您无法从Java代码中完全控制它。

假设ListStopWords.txtFileLoader类在同一个包中:

URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.getPath());

或者,如果您只是InputStream之后的所有内容:

InputStream input = getClass().getResourceAsStream("ListStopWords.txt");

如果文件是-as包名称提示 - 实际上一个完全properties file(包含key=value行)只有“错误”扩展名,那么你可以立即将其提供给load()方法。

Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("ListStopWords.txt"));

注意:当您尝试从static上下文中访问它时,请在上面的示例中使用FileLoader.class代替getClass()

答案 1 :(得分:38)

如果我们想指定文件的相对路径,可以使用以下行。

File file = new File("./properties/files/ListStopWords.txt");  

答案 2 :(得分:23)

相对路径在java中使用。操作

  • 。与当前运行的上下文相同的文件夹。
  • ..表示当前正在运行的上下文的父文件夹。

所以问题是你如何知道java当前正在寻找的路径?

做一个小实验

   File directory = new File("./");
   System.out.println(directory.getAbsolutePath());

观察输出,您将了解java正在查找的当前目录。从那里,只需使用./运算符来定位您的文件。

例如,如果输出是

  

G:\ JAVA8Ws \ MyProject的\含量

并且您的文件存在于MyProject文件夹中,只需使用

File resourceFile = new File("../myFile.txt");

希望这有帮助

答案 3 :(得分:7)

InputStream in = FileLoader.class.getResourceAsStream("<relative path from this class to the file to be read>");
try {
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    String line = null;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
} catch (Exception e) {
    e.printStackTrace();
}

答案 4 :(得分:6)

尝试.\properties\files\ListStopWords.txt

答案 5 :(得分:4)

虽然BalusC提供的答案适用于这种情况,但是当文件路径包含空格时它会中断,因为在URL中,这些将被转换为%20,这不是有效的文件名。如果使用URI而不是String构造File对象,则将正确处理空格:

URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.toURI());

答案 6 :(得分:2)

我本来可以发表评论,但我的代表较少。 Samrat的回答为我做了工作。最好通过以下代码查看当前目录路径。

    File directory = new File("./");
    System.out.println(directory.getAbsolutePath());

我只是用它来纠正我在项目中遇到的问题。确保使用./返回当前目录的父目录。

    ./test/conf/appProperties/keystore 

答案 7 :(得分:1)

对我来说,实际上问题是File对象的类路径来自<project folder path> or ./src,所以使用File file = new File("./src/xxx.txt");解决了我的问题

答案 8 :(得分:1)

对我来说它适用于 -

    String token = "";
    File fileName = new File("filename.txt").getAbsoluteFile();
    Scanner inFile = null;
    try {
        inFile = new Scanner(fileName);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    while( inFile.hasNext() )
    {
        String temp = inFile.next( );  
        token = token + temp;
    }
    inFile.close(); 
    
    System.out.println("file contents" +token);

答案 9 :(得分:0)

我想解析&#39; command.json&#39;在src / main // js / Simulator.java中。为此,我在src文件夹中复制了json文件并给出了这样的绝对路径:

Object obj  = parser.parse(new FileReader("./src/command.json"));

答案 10 :(得分:0)

enter image description here

假设您想从resources类的FileSystem目录中读取内容。

String file = "dummy.txt";
var path = Paths.get("src/com/company/fs/resources/", file);
System.out.println(path);

System.out.println(Files.readString(path));

注意:不需要开头.

答案 11 :(得分:0)

String basePath = new File(“ myFile.txt”)。getAbsolutePath(); 您可以使用此基本路径作为文件的正确路径

答案 12 :(得分:0)

如果你想从 src 文件夹内的资源文件夹加载属性文件,使用这个

String resourceFile = "resources/db.properties";
InputStream resourceStream = ClassLoader.getSystemClassLoader().getResourceAsStream(resourceFile);
Properties p=new Properties();  
p.load(resourceStream);  
      
    System.out.println(p.getProperty("db")); 

db.properties 文件包含键和值 db=sybase

答案 13 :(得分:-1)

如果您尝试从静态方法或静态阻止中调用getClass(),则可以执行以下操作:

您可以在正在加载的getClass()对象上调用Properties

public static Properties pathProperties = null;

static { 
    pathProperties = new Properties();
    String pathPropertiesFile = "/file.xml;
    InputStream paths = pathProperties.getClass().getResourceAsStream(pathPropertiesFile);
}

答案 14 :(得分:-1)

如果没有读取文本文件,请尝试使用更接近的绝对路径(如果您愿意的话) 你可以使用完整的绝对路径,)像这样:

FileInputStream fin=new FileInputStream("\\Dash\\src\\RS\\Test.txt");

假设绝对路径为:

C:\\Folder1\\Folder2\\Dash\\src\\RS\\Test.txt