2013-07-31 107 views
0

我的工作轉移了服務器和客戶端之間文件的Java項目,我已經成功地將文件發送到所需的輸出位置,但唯一的問題是我必須包括完整輸出路徑中的文件名稱以成功保存。我的程序以這種方式運行:java的套接字文件傳輸輸出路徑

首先,它獲取文件的路徑被轉移輸入到控制檯,然後再將它得到的輸出路徑,作爲輸入到控制檯。

這裏有相應的文件名,進口和出口(我認爲這個問題是在這裏的地方,並張貼這部分將被就夠了)

服務器端

.... 
String in_filePath = null; 
System.out.print("enter the file name: "); 
in_filePath = sc.nextLine(); 
File myFile = new File(in_filePath); 
System.out.println("The file chosen is being sent..."); 
byte[] mybytearray = new byte[(int) myFile.length()]; 
FileInputStream fis = null; 

     try { 
       fis = new FileInputStream(myFile); 
       sc.close(); 
      } catch (FileNotFoundException ex) { 
       ex.printStackTrace(); 
      } 

客戶端的代碼

..... 
int bufferSize = clientSocket.getReceiveBufferSize(); 
is = clientSocket.getInputStream(); 
DataInputStream clientdata = new DataInputStream(is); 
String fileName = clientdata.readUTF(); 
System.out.println("file to be transferred is: " + fileName); 
System.out.print("file output path: "); 
String out_filePath; 
out_filePath = sc.nextLine(); 
File file = new File(out_filePath); 
fos = new FileOutputStream(file); 
bos = new BufferedOutputStream(fos); 
bytesRead = is.read(aByte, 0, aByte.length); 
    do { 
      baos.write(aByte); 
      bytesRead = is.read(aByte); 
     } while (bytesRead != -1); 
bos.write(baos.toByteArray()); 
System.out.println(fileName + " transferred successfully"); 

起初我沒有包括輸出路徑i我的節目;如預期的那樣,輸出路徑是根項目文件夾,並且它在讀取文件名併發送具有相同名稱的文件沒有問題時工作得很好。但是當我實現輸出路徑查詢時,我選擇的輸出路徑如「C:\」或「C:\ blabla \」給我例外,如上所述。此外,將輸出路徑設置爲「C:\ image.jpg」或「blablabla \ image.jpg」可以很好地工作(假設要將文件的名稱複製爲image.jpg),讀取文件名時會出現問題?任何幫助,將不勝感激

編輯:現在我收到一個套接字寫錯誤,如果我已經給出了「c:\」(或任何類型的路徑)作爲輸出路徑,但它仍然工作良好,如果輸出給定路徑,如「C:\ image.jpg的」

+0

不例外發生在哪一行?並在服務器或客戶端?標題說輸出路徑,但總結表明它可能在客戶端? – Robadob

+0

我加入蹤跡看到它,但現在得到一個不同的錯誤,在服務器端套接字寫入錯誤,如果我給輸出路徑爲c:\,並再次它工作得很好,如果我給完整的文件名 – emenike

回答

0

假設你在目錄中執行程序「C:\」,和你的文件「image.jpg的」位於「C:\影像\圖像。 JPG」。 如果您提供的輸入爲「image.jpg」,則不起作用。您必須提供「images \ image.jpg」代替。

您可以輕鬆地檢查是否已通過添加下面一行到你的服務器端代碼打一個實際的文件:

System.out.println(myFile.isFile()); 
+0

我不試圖直接在某個文件夾中搜索image.jpg,我將完整路徑作爲輸入。問題不在輸入部分,但它在輸出部分,因爲它似乎 – emenike

+1

你的意思是你給服務器和客戶端的完整路徑作爲輸入?對於服務器端,這將是確定以提供如「圖像\ image.jpg的」相對路徑,但客戶端代碼要麼期望WITHOUT子目錄(如「image.jpg的」)或全路徑相對路徑(如「C:\ images \ image.jpg」)。 – victorantunes

+0

HM我不知道客戶會期待一個「image.jpg的」保存,以爲是意外,實際上我並不很瞭解,以爲只顯示像C一些路徑:\影像\應該足夠(如從互聯網上保存下載的文件) – emenike