首页  »   J2SE

大神们帮小弟我看看小弟我写的代码有什么,实在是找不出来了(关于输入输出流的)

网友分享于:2015-11-20  浏览:0次
大神们帮我看看我写的代码有什么,实在是找不出来了(关于输入输出流的).
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class H2 {
public static void main(String[] args) {
File file = new File("test.dat");
if(!file.exists()){
DataOutputStream dos=null; 
try {
dos= new DataOutputStream(new FileOutputStream(file));
dos.writeLong(10000L);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
dos.flush();
dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}else{
DataOutputStream dos=null;
DataInputStream dis = null;
try {
dis= new DataInputStream(new FileInputStream(file));
dos= new DataOutputStream(new FileOutputStream(file)) ;

 Long a=dis.readLong();
System.out.println(a);
a=a+1;
System.out.println(a);
dos.writeLong(a);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
dos.flush();
dos.close();
dis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}             
}
第一次运行时成功创建了一个dat文件并写入了1000L,但是第二次运行时出现java.io.EOFException异常,打开文件发现内容都清空了.我判断应该是在创建输出流的时候出现问题,并把dos= new DataOutputStream(new FileOutputStream(file)) ;放在了 Long a=dis.readLong();之后,删除文件后在运行了两次果然没发生异常.
实在是搞不懂问题的原因是什么,之前学习复制文件同时创建输入输出流都是可行的,为什么到了这里就行不通了呢?
------解决思路----------------------
你这是一女嫁二夫啊,输入流和输出流不要同时操作同一个文件,会造成读写冲突,你先创建输入流,读完了再创建输出流,向里面写数据
------解决思路----------------------
输出流和输入流要分别写,二者的关闭流也分别,你出现的这个错误是输入流输出流写在一起造成的滞空异常,把二者分别写试试。

相关解决方案

最新解决方案