好的,所以我正在使用Java程序启动两个类之间的套接字连接(FileSender
和FileReceiver
)的项目。我的基本想法是,FileSender
是这样的:在Java中使用FileOutputStream创建和写入文件
try {
writer = new DataOutputStream(connect.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//While we have bytes to send
while(filein.available() >0){
//We write them out to our buffer
writer.write(filein.read(outBuffer));
writer.flush();
}
//Then close our filein
filein.close();
//And then our socket;
connect.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
构造函数包含检查是否存在该文件的代码,并且该套接字连接,等等。在我的FileReader里面是这样的:
input = recvSocket.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(input.getInputStream()));
FileOutputStream fOut= new FileOutputStream(filename);
String line = br.readLine();
while(line != null){
fOut.write(line.getBytes());
fOut.flush();
line = br.readLine();
}
System.out.println("Before RECV close statements");
fOut.close();
input.close();
recvSocket.close();
System.out.println("After RECV clsoe statements");
所有在try-catch块内。所以,我试图做的是在文件中读取FileSender
,转换为字节,发送并清除它。然后读取字节,写入fileOut,刷新并继续等待更多。我确保关闭所有我打开的东西,所以......这里出现了怪异的部分。
当我尝试在Eclipse中打开创建的文本文件时,它会告诉我“发生了SWT错误...建议退出工作台...请参阅.log以获取更多详细信息。”。另一个窗口弹出“未处理的事件循环异常,(不再处理)”。但是,如果我尝试打开的Notepad2发送文本文件,我得到
ThisIsASentTextfile
这是很好的(当然,减去一个事实,即应该有换行,但我正在上...) 。有谁知道为什么会发生这种情况?当我们检查时,如何添加换行符?
(这是转学过来的java文件没有得到其他一些图书馆特别坏的方式?)
编辑:更新:我改变了我的代码以下(FileReceiver),在不改变发送者:
try {
input = recvSocket.accept();
//InputStream br = new InputStream(input.getInputStream());
FileWriter fOut= new FileWriter(filename);
//BufferedWriter out = new BufferedWriter(fOut);
//String line = br.
byte info = (byte) input.getInputStream().read();
while((int)info != 0){
fOut.write(info);
fOut.flush();
info = (byte) input.getInputStream().read();
}
fOut.flush();
System.out.println("Before RECV close statements");
fOut.close();
//input.close();
recvSocket.close();
System.out.println("After RECV clsoe statements");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
This works。我得到一个正确大小的文本文件(在获得4Kb标准大小之前),并且格式正确。我将在下一张图片上尝试它,并让您更新。
尝试在十六进制编辑器打开创建的文本文件,看看是否有可能是怪异的字节导致Eclipse的问题。 – 2010-04-27 16:23:20