2013-05-07 38 views
0

我想要從FTP服務器上的文件,我也用的Apache POI client.retrieveFile()方法,但我無法打開該圖是:閱讀Excel 2007和Java語言編寫的文件

Excel無法打開文件檢查文件擴展名和文件格式。檢查文件沒有損壞

然後我用文件讀寫器。以下是我的代碼片段。

public void testFileWriter() 
    { 
     try{ 

     FTPFile[] files = client.listFiles("/Ftp1"); 
     for (FTPFile file : files) { 
      File serverFile = new File("D:/Pondi.xlsx"); 
      if(!serverFile.isFile()) 
      { 
       serverFile.createNewFile(); 
      } 
      BufferedWriter writer = new BufferedWriter(new FileWriter(serverFile)); 
      client.enterLocalPassiveMode(); 
      InputStream inputStream = client.retrieveFileStream("/Ftp1/"+ file.getName()); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 
      System.out.println("Created Reader"); 
      while(reader.read()!=-1) 
      { 
       String temp = reader.readLine(); 
       System.out.println(temp); 


       writer.write(temp); 
      } 
      writer.flush(); 
      writer.close(); 
      reader.close(); 
     } 

     } 
     catch(IOException ioe){ 
      ioe.printStackTrace(); 
     } 
    } 

請幫我解決這個關鍵問題。

+2

我不確定'reader.readLine()'是一個好主意,如果你想讀取二進制數據... – Uooo 2013-05-07 05:16:20

+0

我也使用POI方法client.retreiveFile(String path,FileOutputStream);但這也沒用。 – user2335004 2013-05-07 05:20:50

+0

你在複製它之後使用Java和**複製文件,你試圖用excel打開它(不在你的Java程序中),對嗎? – Uooo 2013-05-07 05:25:10

回答

1

如果您想讀取和複製二進制數據,則不得使用reader.readLine(),因爲二進制文件中沒有行。因此,這種嘗試很可能會失敗。

複製像這樣代替:

int fileNo = 0; 
for (FTPFile file : files) { 
    File serverFile = new File("D:/Pondi_" + fileNo + ".xlsx"); 
    ... 
    InputStream in = client.retrieveFileStream("/Ftp1/"+ file.getName()); 
    OutputStream out = new FileOutputStream(serverFile); 

    // read and copy binary data 
    byte[] buf = new byte[1024]; 
    int len; 
    while ((len = in.read(buf)) > 0){ 
     out.write(buf, 0, len); 
    } 

    in.close(); 
    out.close(); 
    fileNo++; 
} 

在那旁邊,考慮給你的文件不同的名稱D:/Pondi.xlsx,因爲否則文件獲取循環一次又一次地改寫。我用fileNo做了這個。

+0

問題解決了,我必須設置文件類型爲二進制,儘管默認類型的ASCII.below是代碼片段:client.setFileType(FTP.BINARY_FILE_TYPE ); – user2335004 2013-05-08 06:33:12

2

您必須使用API​​才能使用它。您不能像讀取普通文本文件一樣閱讀這些文件。

JExcel將適合您的需求。

例子是可here

複製文件利用this。通過您使用的方法讀取文件進行復制將無法正常工作。

希望對你有幫助。

+0

我也必須將它寫在我的本地環境中,您的回答只描述要讀取它。 – user2335004 2013-05-07 05:24:58

+0

「寫在我的本地環境」??你那是什麼意思?如果你能閱讀它,你不能使用這些數據進行進一步處理? – Maximin 2013-05-07 05:28:02

+0

OP會嘗試將文件從FTP服務器複製到本地計算機。之後,OP會嘗試用Excel打開它,顯示錯誤。 – Uooo 2013-05-07 05:34:40