我有以下代码用于使用Apache POI在Java中读取Excel工作表。虽然该文件存在,但为什么它会给我一个FileNotFound异常?
import org.apache.poi.hssf.usermodel.HSSFSheet;
import java.io.FileInputStream;
import java.io.File;
public class ReadFromExcel {
public static void main(String[] args) {
FileInputStream file = new FileInputStream(new File("C:\\Personal\\test.xlsx"));
}
}
我刚刚从Windows资源管理器中复制并粘贴了文件位置,因此我知道该文件确实存在。然后为什么Java无法找到它?
与"文件"使用相同的路径class而不是" FileInputStream"它工作正常。 FileInputStream类中的路径有什么特别之处?
答案 0 :(得分:0)
也许前两个'\'只代表一个'\',所以你可以使用文件路径为“C:\\ Personal \ test.xlsx”
答案 1 :(得分:0)
建议:致电File.canRead()
以查看您是否有权打开该文件。
Java new File() says FileNotFoundException but file exists
有三种情况可能会引发FileNotFoundException。
- 指定的文件不存在。
- 指定的文件实际上是一个目录。
- 由于某种原因,无法打开指定的文件进行阅读。
醇>
答案 2 :(得分:0)
试试这段代码:
import org.apache.poi.hssf.usermodel.HSSFSheet;
import java.io.FileInputStream;
import java.io.File;
import java.io.FileNotFoundException;
public class ReadFromExcel {
public static void main(String[] args) throws FileNotFoundException {
File f=new File("C:"+File.separator+"Personal"+File.separator+"test.xlsx");
FileInputStream file=null;
if(f.exists()) {
file = new FileInputStream(f);
//rest of code
} else{
System.out.println("The file does not exist!Please enter correct filename!");
}
}
}
我有三点要指出:
File.separator
而不是使用“\”或“/”。这样可以使您的代码更具可移植性。f.exists()
检查文件是否存在可以让您知道您尝试将文件作为参数传递给FileInputStream。
当然会有所帮助!!