表达式file.exists()返回true,读取文件失败,出现FileNotFoundException

时间:2014-12-01 11:24:25

标签: java netbeans-7 filenotfoundexception

方法返回FileNotFoundException

String statSource = 'some path';
 try {

         File file = new File(statSource);

         if (!file.exists())
         {
             System.out.println(file.getPath() + " doesn't exist!");
         }
         else
         {
             System.out.println("OK!");
         }


         // otevření CSV
         csv = new CsvReader(statSource, ';', Charset.forName("windows-1250"));
     }

起初我得到'OK!'消息,但在最后一行,我得到FileNotFoundException。文件位于本地硬盘上。

你知道什么是错的吗?

3 个答案:

答案 0 :(得分:1)

假设您正在讨论this class,并且您正在使用JDK 7,请帮自己一个忙,并使用它:

final Path csvpath = Paths.get(statSource);

try (
    final InputStream in = Files.newInputStream(csvpath);
    final CsvReader csv = new CsvReader(in, ';', Charset.forName("windows-1250");
) {
    // operate on csv
}

如果文件不存在或其他什么,您至少会得到一个有意义的例外:AccessDeniedExceptionNoSuchFileException等;所有这些都继承了FileSystemException

答案 1 :(得分:0)

  

FileNotFoundException - 如果给定的文件对象不表示   现有的可写常规文件和该名称的新常规文件   无法创建,或者在打开时发生其他错误   创建文件

因此,在以下3个案例中可能会抛出FileNotFoundException

  1. 文件不存在。
  2. 文件实际上是一个目录。
  3. 由于某种原因,无法打开指定的文件进行阅读,例如权限
  4. 因此,请确保您在文件而不是目录上运行,然后尝试使用file.canRead()(在Windows上不够可靠,请参阅bug)以测试#3。< / p>

答案 2 :(得分:-1)

我认为您只是将文件名提供给csvReader。要读取java中的Files,你必须使用FileReader。

您可以尝试将最后一行更改为

csv = new CsvReader(new FileReader(statSource), ';', Charset.forName("windows-1250"));