【问题标题】:FileInputStream can not find fileFileInputStream 找不到文件
【发布时间】:2016-12-30 22:52:11
【问题描述】:

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

发生了一个 FileNotFoundException java.io.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")));

还是一样的结果。名称就在那里,控制台请求找到我正在解析的内容不是问题。有任何反馈吗?

【问题讨论】:

  • 你确定文件在C盘根目录下吗?
  • 打印 file.isFile()。还要检查文件的扩展名,有时扩展名会导致这个问题。
  • @Austin 如果文件位于其他位置,则无法获取说明文件名称的信息。
  • 异常的错误信息是什么?

标签: java file io


【解决方案1】:

您会发现问题实际上是路径名,一种或另一种方式。

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

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

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

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

您提供了一个绝对路径(根据启发式),它不会太长。所以问题一定是Windows自己认为该文件不存在。

【讨论】:

    【解决方案2】:

    这里有一个演示可以帮助你:

    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);
        }
    }
    } 
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多