-1
我正在使簡單的客戶端 - 服務器應用程序在服務器上創建文件副本。FileOutputStream創建文件,即使我檢查文件存在
有發送文件到服務器的客戶方方法:
private void makeCopy(Socket clientSock) throws IOException {
File file = new File("D:\\client\\toCopy.bmp");
File dest = new File("D:\\server\\copyFile.bmp");
boolean ifExists = dest.exists();
if(ifExists && !file.isDirectory()){
System.out.println("Copy is already made on server.");
}
else{
fis = new FileInputStream(file);
byte[] buffer = new byte[4096];
while (fis.read(buffer) > 0) {
oos.write(buffer);
}
//fis.close();
oos.close();
}
}
也有服務器端方法從客戶端接收文件:
public void saveFile(Socket s) throws IOException{
File copy = new File("D:\\server\\fileCopy.bmp");
fos = new FileOutputStream(copy);
File fromServer = new File("D:\\client\\toCopy.bmp");
if(copy.exists() && !copy.isDirectory()){
}
else{
byte[] buffer = new byte[4096];
int filesize = (int)fromServer.length();
int read = 0;
int totalRead = 0;
int remaining = filesize;
while((read = ois.read(buffer, 0, Math.min(buffer.length, remaining))) > 0) {
totalRead += read;
remaining -= read;
System.out.println("read " + totalRead + " bytes.");
fos.write(buffer, 0, read);
}
}
}
的問題是,即使我檢查文件的實存它仍然生成我無法打開的文件(它有0個字節寫入)。有任何想法嗎 ?
此代碼不會生成零長度文件,除非您發送零長度文件。一個客戶端如何可能用'File'類檢查服務器上的內容?你的問題沒有意義。注意您的客戶端複製循環不正確。這裏有很多正確的例子。 – EJP