Java 使用FileInputStream的有效文件的FileNotFoundException
当我编写一个Java 使用FileInputStream的有效文件的FileNotFoundException,java,io,filenotfoundexception,Java,Io,Filenotfoundexception,当我编写一个FileInputStream时,当我有一个有效的文件时,它抛出一个FileNotFoundException。 我用了这个: package io; import java.io.*; public class implementIo { public static int i; public static FileOutputStream output; public static FileInputStream input; public sta
FileInputStream
时,当我有一个有效的文件时,它抛出一个FileNotFoundException。
我用了这个:
package io;
import java.io.*;
public class implementIo {
public static int i;
public static FileOutputStream output;
public static FileInputStream input;
public static void main(String args[]) {
try {
output = new FileOutputStream("writeModification.txt");
input = new FileInputStream("modification.txt");
do {
i = input.read();
if(i != -1) output.write(i);
}while(i != -1);
} catch (Exception e) {
System.out.println("Exception caught " + e);
} finally {
try {
if(output == null) input.close();
}catch(IOException e) {
System.out.println("IOException caught: " + e);
}
}
}
}
虽然我在同一个包文件夹中有两个名为“modify.txt”和“printmodify.txt”的独立文件,但系统抛出了一个
FileNotFoundException
。请帮忙 这是因为FileInputStream不像newFileOutputStream()
那样在初始化期间提供文件创建。因此,如果已经说过这些,我们可以看到一件需要记住的有趣事情:每次初始化文件输出流时都会创建修改.txt(并且不会被覆盖),这就是为什么您的代码很可能在新文件输入流()
行中断的原因
如何处理您的异常?
您可以在执行代码之前创建文件(手动使用New
->文本文档
等),也可以修改代码并使用文件
类:
File file = new File("modification.txt");
try {
file.createNewFile();
input = new FileInputStream(file);
//your code here - output etc.
即使在同一个包文件夹中创建了文件,您的代码仍然无法工作?这是因为流查找文件的默认路径是当前工作目录。以下是一个例子:
myproject
|___src
| |___main
| |___java
| |___io
| |___implementIo
|___writeModification.txt
|___modification.txt
myproject
|___src
|___main
|___java
|___io
|___implementIo
|___writeModification.txt
|___modification.txt
如果您想像以前一样使用流(在stream构造函数参数中只使用一个简单的文件名),那么这是正确的结构。但是如果文件不在那里,则必须指定绝对路径。以下是一个例子:
myproject
|___src
| |___main
| |___java
| |___io
| |___implementIo
|___writeModification.txt
|___modification.txt
myproject
|___src
|___main
|___java
|___io
|___implementIo
|___writeModification.txt
|___modification.txt
访问文件的正确方法是:
FileInputStream input = new FileInputStream("C://myproject//src//main//java//io//modification.txt");
输出流也是如此。(请使用正确的文件位置修改路径)显示完整堆栈跟踪输出将在当前工作目录中搜索文件,该目录是java启动的目录或IDE中设置的目录-当然不是软件包文件夹。您可以使用类似于System.out.println(新文件(“modification.txt”).getAbsolutePath())的内容
查看文件的搜索位置为什么编辑帖子而不按要求放入堆栈跟踪?modification.txt
将在每次调用new FileOutputStream(“modification.txt”)
时被覆盖,在new FileInputStream(…)
之前创建一个空的输入文件完全没有意义。“流查找文件的默认路径”不是“项目目录”,而是当前工作目录。答案是完全错误的。我明白你的意思,为什么它完全没有意义,但我在想,也许OP想在他读东西之前修改文件。我想说的是当前的工作目录,而不是项目目录,谢谢你的观察。你不能修改一个不存在的文件。如果OP想在读取新文件之前将一些内容放入新文件中,让他这样做,并且当他在这样做的过程中调用new fileoutstream()
时,该文件将被创建:尽管在这种情况下他为什么需要文件仍然是个谜File.createNewFile()
几乎没有正确的用法,这不是其中之一。而且提供完整的路径名来打开文件是不“正确”的,特别是当该路径直接指向特定计算机上特定用户的目录结构时。他没有理由不能继续使用相对路径名,只要他理解它是相对于什么的。好的,谢谢你让我理解为什么我的答案不正确。