首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 檔案路徑傳輸問題:反斜線轉義與 DataInputStream 讀取陷阱

     編輯:程式設計綜合問答

客戶端傳送 Windows 路徑 C:\Users\msg.log,伺服端用 DataInputStream 讀取後無法開啟檔案,直接硬編碼路徑卻可行。

核心問題

  1. 讀取方式錯誤: reader.read(temp) 單次讀取字元陣列,未處理訊息邊界(長度、換行符、EOF),導致字串截斷或殘留垃圾字元。
  2. 反斜線轉義: Java 字串中 \ 為轉義字元,路徑需雙反斜線 \\ 或正斜線 /。若從網路接收原始字串 C:\Users\msg.log,實際字串內容已是單反斜線,無需再轉義,直接用於 new File(str) 即可。

正確傳輸協議

// 客戶端:發送長度 + 內容
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
byte[] pathBytes = "C:/Users/msg.log".getBytes(StandardCharsets.UTF_8);
dos.writeInt(pathBytes.length);
dos.write(pathBytes);
dos.flush();

// 伺服端:先讀長度,再精確讀取
DataInputStream dis = new DataInputStream(socket.getInputStream());
int len = dis.readInt();
byte[] buf = new byte[len];
dis.readFully(buf);
String path = new String(buf, StandardCharsets.UTF_8);
FileInputStream fis = new FileInputStream(path); // 直接使用

關鍵修正

  • 使用 DataOutputStream.writeInt/readInt 定義訊息長度,避免黏包/半包。
  • 統一用正斜線 / 跨平台相容。
  • 指定字元集 StandardCharsets.UTF_8 避免編碼亂碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved