Java文件I/O:为什么总是出现I/O异常?
我试图写入一个文件,然后从同一个文件中读取。输出错误:I/O异常。这意味着程序正在捕获IOExceptionJava文件I/O:为什么总是出现I/O异常?,java,file-io,bufferedreader,ioexception,bufferedwriter,Java,File Io,Bufferedreader,Ioexception,Bufferedwriter,我试图写入一个文件,然后从同一个文件中读取。输出错误:I/O异常。这意味着程序正在捕获IOException public class fileIO { public static void main(String[] args) { // TODO Auto-generated method stub try { File file = new File("io.txt"); Buffer
public class fileIO {
public static void main(String[] args) {
// TODO Auto-generated method stub
try
{
File file = new File("io.txt");
BufferedReader read = new BufferedReader(new FileReader(file));
BufferedWriter write = new BufferedWriter(new FileWriter(file));
String needs = "This is going to the file";
write.write(needs);
String stuff = read.readLine();
while(stuff != null)
{
System.out.println(stuff);
stuff = read.readLine();
}
}
catch(IOException e)
{
System.out.println("Error: I/O Exception");
}
catch(NullPointerException e)
{
System.out.println("Error: NullPointerException");
}
}
}'
不能同时读取和写入文件,这将引发IOException。在尝试使用其他内容访问该文件之前,应先关闭任何可以访问该文件的内容。在尝试使用BufferedReader访问文件之前,在BufferedWriter上调用close方法应该可以做到这一点 编辑:另外,正如其他人提到的,您可以使用e.printStackTrace查看程序中发生异常的位置,这在调试时非常有帮助
编辑:正如zapl所阐明的,有些文件系统(包括Windows)是这样的,但并非所有文件系统都是这样。我的假设是,您使用的文件系统限制了这一点,因为这似乎是最可能的问题。我将BufferedReader移动到关闭BufferedWriter后的位置,这就成功了。谢谢你的帮助 公共类文件{
public static void main(String[] args) {
// TODO Auto-generated method stub
try
{
File file = new File("io.txt");
BufferedWriter write = new BufferedWriter(new FileWriter(file));
String needs = "This is going to the file";
write.write(needs);
write.close();
BufferedReader read = new BufferedReader(new FileReader(file));
String stuff = read.readLine();
while(stuff != null)
{
System.out.println(stuff);
stuff = read.readLine();
}
read.close();
}
catch(IOException e)
{
System.out.println("Error: I/O Exception");
e.printStackTrace();
}
catch(NullPointerException e)
{
System.out.println("Error: NullPointerException");
e.printStackTrace();
}
}
}您有什么例外?FileNotFound?查看stacktrace,您应该将其添加到问题中。只需在catch块中执行e.printStackTrace即可。打印堆栈跟踪将告诉您更多错误。让main抛出异常,而不是捕获异常。我猜他是在同一时间写入和读取同一个文件。@zapl谢谢,我已经修改了我的答案。