2012-03-13 52 views
1

我嘗試使用java.io創建另一個pdf文件(在本地驅動器中)。這個東西是一個擴展名爲.pdf的文件,但是我無法打開這個文件,它說這個文件已經被使用了,最重要的是這個文件的大小太大了,並且它不斷增加(原始文件大小:5,777 kB和截至目前新創建的一個文件大小爲38,567kB)。我不是那麼多熟練java程序員,但我仍感激,如果任何人都可以給我一個解釋..通過java.io創建pdf

String path = "D:\\priya_Docs\\Android pdfs\\Professional_Android_Application_Development.pdf"; 
     File file = new File(path); 
     System.out.println("Located a file " + file.isFile()); 
     String filesArray = file.getPath(); 
     File getFile = file.getAbsoluteFile(); 
     FileInputStream fis = new FileInputStream(getFile); 
     FileOutputStream fos = new FileOutputStream(
       "D:\\priya_Docs\\Androiddoc.pdf"); 
     for (int b = fis.read(); b != -1;) { 
      fos.write(b); 
     } 
+0

當您完成寫作時,您是否關閉輸出流? – 2012-03-13 07:56:44

+0

您正在嘗試逐個字節複製文件。這非常慢並且效率低下。 – Jesper 2012-03-13 07:58:28

+0

您確定在稍後的時間點您沒有寫入任何其他內容到FileOutputStream嗎?你最好在for循環之後刷新並關閉流,以確保沒有其他東西寫入它。 – Alderath 2012-03-13 08:07:20

回答

0

你遇到的兩個問題 第一,你必須關閉資源:fis和fos,否則它會說文件已經在使用 秒,您必須使用byte []接收數據,因爲pdf文件是按字節數組排列的

  String path = "D:\\priya_Docs\\Android pdfs\\Professional_Android_Application_Development.pdf"; 
    File file = new File(path); 
    System.out.println("Located a file " + file.isFile()); 
    String filesArray = file.getPath(); 
    File getFile = file.getAbsoluteFile(); 
    FileInputStream fis = new FileInputStream(getFile); 
    FileOutputStream fos = new FileOutputStream(
      "D:\\priya_Docs\\Androiddoc.pdf"); 
    byte[] buff=new byte[1024]; 
    int len; 
    while((len=fis.read(buff))>=0) { 
     fos.write(buff,0,len); 
    } 

    fis.close(); 
    fos.close(); 
+0

感謝您的幫助!所以你的意思是說它更好地將文件讀入字節緩衝區,而不是通過int讀取和寫入。 – 2012-03-13 08:42:33