FileInputStream не может найти файл

Файл имеет новый экземпляр из канонического пути, который возвращает список файлов неправильно.

Произошло исключение 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")));

Все тот же результат. Имя там это не проблема, консольный запрос находит то, что я анализирую. Есть какие-то отзывы, что это есть?

2 ответа

  1. Вот демо, чтобы помочь вам:

    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);
        }
    }
    } 
    }
    
  2. Вы обнаружите, что проблема на самом деле является путь, так или иначе.

    При FileInputStreamпопытке открыть файл в Windows он проверяет, является ли путь абсолютным с помощью следующей эвристики:

    • Если первые два символа '\'— UNC абсолютный путь
    • Если 2-й символ-a, ':'а третий '\'— абсолютный путь с именем диска.

    Если путь является абсолютным (и не слишком длинным), то он передается в ОС Windows, чтобы открыть файл. Это включает в себя (окончательную) проверку, чтобы увидеть, существует ли файл на самом деле.

    (Приведенное выше описание основано на моем чтении исходного кода C для реализации собственного кода FileInputStream.open0для Windows … в дереве исходного кода OpenJDK для Java 8.)

    Вы предоставили абсолютный путь (согласно эвристике), и он не слишком длинный. Таким образом, проблема должна быть в том, что сама Windows думает, что файл не существует.