FileInputStream无法找到文件

时间:2016-12-30 22:52:12

标签: java file io

文件从规范路径中有一个新的实例化,它返回错误的文件列表。

发生了java.io.FileNotFoundException

的FileNotFoundException

Java类部分

 File file = new File("C:\\Locations.txt");
 FileInputStream fis = new FileInputStream(file);

我也尝试过使用FileReader

 BufferedReader br = new BufferedReader(new FileReader(new File("C:\\Locations.txt")));

结果仍然相同。这个名称不存在问题是控制台请求找到我正在解析的内容。有什么反馈吗?

2 个答案:

答案 0 :(得分:0)

这是一个帮助你的演示:

import java.io.File;

public class FileDemo {

public static void main(String[] args) {
    File file = new File("C:\\test\\locations.txt");
    if (!file.exists()) {
        System.out.println("does not exist.");
       return;
    }
  if(file.isFile() && file.canRead()) {
        System.out.println(file.getName()+ " can be read from.");
 }
 if (file.isDirectory()) {
        System.out.println(file.getPath()+" is a directory containing...");
        String[] files = file.list();
        for (String file1 : files) {
            System.out.println(file1);
        }
    }
  }
 }

尝试捕捉以使事情干净。 对于控制台测试,如果您确定该文件将作为参数提供,那么请按以下方式进行:

import java.io.File;

public class FileDemo {

public static void main(String[] args) {
File file = new File(args[0]);
if (!file.exists()) {
    System.out.println("File does not exist.");
   return;
}
if(file.isFile() && file.canRead()) {
    System.out.println(file.getName()+ " can be read from.");
}
if (file.isDirectory()) {
    System.out.println(file.getPath()+" is a directory containing...");
String[] files = file.list();
    for (String file1 : files) {
        System.out.println(file1);
    }
}
} 
}

答案 1 :(得分:0)

您会发现问题实际上是路径名,无论如何。

FileInputStream尝试在Windows上打开文件时,它会通过以下启发式检查路径是否为绝对路径:

  • 如果前两个字符是'\\' - UNC绝对路径
  • 如果第二个字符是':'而第三个字符是'\\' - 带有驱动器名称的绝对路径。

如果路径是绝对的(并且不会太长),则将其传递给Windows操作系统以打开该文件。这包括(明确的)检查文件是否确实存在。

(上面的描述是基于我在Java 8的OpenJDK源代码树中阅读用于Windows的FileInputStream.open0的本机代码实现的C源代码。)

您提供了一个绝对路径(根据启发式方法)并且它不会太长。所以问题必须是Windows本身认为该文件不存在。