好的,所以我正在使用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