簡體   English   中英

FileInputStream找不到文件

[英]FileInputStream can not find file

文件從規范路徑返回了錯誤的文件列表,具有新的實例化。

發生了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")));

結果還是一樣。 名稱在那里,這不是問題,控制台請求找到了我正在解析的內容。 有任何反饋嗎?

這是一個可以幫助您的演示:

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

您會發現問題實際上是路徑名,一種或另一種。

FileInputStream嘗試在Windows上打開文件時,它通過以下試探法檢查路徑是否為絕對路徑:

  • 如果前兩個字符是'\\\\' -UNC絕對路徑
  • 如果第二個字符是':' ,第三個字符是'\\\\' -具有驅動器名稱的絕對路徑。

如果路徑是絕對路徑(並且不是太長),則將其傳遞到Windows操作系統以打開文件。 這包括(確定性)檢查以查看文件是否實際存在。

(以上描述基於我對Java 8的OpenJDK源代碼樹中Windows的FileInputStream.open0的本機代碼實現的C語言源代碼的閱讀。)

您已經提供了一條絕對路徑(根據啟發式方法),並且路徑並不長。 因此,問題必須出在Windows本身認為該文件不存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM