2016-12-22 98 views
0

我的else if塊將驗證遠程服務的結果。新創建的文件無法在Java中打開

如果結果匹配,它將觸發另一個API調用再次聯繫遠程服務。遠程服務會將文件發送回我的客戶端程序。

我測試了我所有的代碼,它正在工作,但我無法打開新文件,它顯示文件已損壞。我的客戶端程序將從遠程服務中讀取文件,並將其寫入另一個目錄中的另一個文件名。

這是我的源代碼:

else if (result == 1 && value.equals("problem")) 
{ 
    String Url = "http://server_name:port/anything/anything/"; 
    String DURL = Url.concat(iD); 
    System.out.println("URL is : " + DURL); // the remote API URL 
    URL theUrl = new URL (DURL); 
    HttpURLConnection con1 = (HttpURLConnection) theUrl.openConnection(); //API call 
    con1.setRequestMethod("GET"); 
    con1.connect(); 
    int responseCode = con1.getResponseCode(); 
    if(responseCode == 200) 
    { 
     try 
     { 
      InputStream is1 = con1.getInputStream(); 
      BufferedReader read1 = new BufferedReader (new InputStreamReader(is1)); 
      String data1 = "" ; 
      while ((data1 = read1.readLine()) != null) 
      { 
       PrintStream ps = new PrintStream(new FileOutputStream(filePath)); 
       ps.print(data1); 
       ps.close(); 

      } 
      System.out.println("The new sanitized file is ready"); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

這是我的代碼d提到filePath:/file/red_new.docx。這是我如何得到我的文件路徑:String filePath = "D:/file/"+fn+"_new."+fileType;fn變量是來自第一個API調用的JSON字符串的文件名,而fileType是來自第二個API調用的JSON字符串的文件類型。我在_new中添加以表明它是一個新文件,並使用java與fnfileType連接來獲取完整路徑。

+0

定義'無法打開新文件',並告訴我們什麼是「顯示文件被損壞」。不清楚你在問什麼。這些文本文件? – EJP

+0

你應該關閉所有打開的連接/流/閱讀器在一個finally塊或多個finally塊...這些往往有助於解決不一致性,這是一個很好的做法,這樣做 –

回答

1

你正在創建每個輸入的線新的輸出文件,所以你永遠只能得到最後一行。而且你也失去了線路終結者。試試這個:

PrintStream ps = new PrintStream(new FileOutputStream(filePath)); 
while ((data1 = read1.readLine()) != null) 
{ 
    ps.println(data1); 
} 
ps.close(); 

你也沒有關閉輸入流。

如果這些文件並不都是文本文件,則應該使用InputStreamOutputStream

+0

謝謝,它現在的工作 – attack

0

請使用finally塊關閉打開的流。如果流未關閉,則在持有流的進程關閉或釋放之前無法打開它。

如:

try(InputStream is1 = con1.getInputStream()){ 
    // ... 
}