2012-01-23 75 views
2

我嘗試使用下面的示例所示的代碼:org.apache.commons.fileupload.disk.DiskFileItem未正確創建?

java.lang.NullPointerException while creating DiskFileItem

我的測試方法中包含以下代碼:

final File TEST_FILE = new File("C:/my_text.txt"); 
final DiskFileItem diskFileItem = new DiskFileItem("fileData", "text/plain", true, TEST_FILE.getName(), 100000000, TEST_FILE.getParentFile()); 
diskFileItem.getOutputStream(); 

System.out.println("diskFileItem.getString() = " + diskFileItem.getString()); 

的文本文件,在這個位置,但最後一行存在在上面的代碼中不輸出文件內容。

任何想法,爲什麼?

注:

下不打印的文件內容:

BufferedReader input = new BufferedReader(new FileReader(TEST_FILE)); 
String line = null; 
while ((line = input.readLine()) != null){ 
    System.out.println(line); 
} 

回答

6

在你的第一個代碼剪斷你使用一個OutputStream,它不工作。在第二部分中,你使用一個InputStream(或任何本IMPL)和它的作品:)你可能想嘗試的getInputStream(),而不是...的OutputStream是要寫入的字節不讀。

http://commons.apache.org/fileupload/apidocs/org/apache/commons/fileupload/disk/DiskFileItem.html

嘗試這一個,這很簡單,從頭只是幫助:

final File TEST_FILE = new File("D:/my_text.txt"); 
    //final DiskFileItem diskFileItem = new DiskFileItem("fileData", "text/plain", true, TEST_FILE.getName(), 100000000, TEST_FILE); 
    try 
    { 
     DiskFileItem fileItem = (DiskFileItem) new DiskFileItemFactory().createItem("fileData", "text/plain", true, TEST_FILE.getName()); 
     InputStream input = new FileInputStream(TEST_FILE); 
     OutputStream os = fileItem.getOutputStream(); 
     int ret = input.read(); 
     while (ret != -1) 
     { 
      os.write(ret); 
      ret = input.read(); 
     } 
     os.flush(); 
     System.out.println("diskFileItem.getString() = " + fileItem.getString()); 
    } 
    catch (Exception e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+0

我想你錯過了什麼,他們在說我上面提到的鏈接。他們調用'diskFileItem.getOutputStream();'來繞過一些錯誤。但API並說,'diskFileItem.getString())'應該輸出文件。無論如何,即使我使用BufferedReader input = new BufferedReader(new InputStreamReader(diskFileItem.getInputStream()));它仍然不會輸出文件。據我所見,這意味着'diskFileItem'不包含文件內容。 – rapt

+0

確定我的壞,我不明白你試圖這樣做。 – TecHunter

+0

謝謝 - 它的工作!我不知道他們爲什麼試圖通過構造函數創建'DiskFileItem'。但使用這個工廠肯定更有意義,而且實際上是有效的。 – rapt

0

與Apache IOUtils一個濃縮液:

final File TEST_FILE = new File("C:/my_text.txt"); 
final DiskFileItem diskFileItem = new DiskFileItem("fileData", "text/plain", true, TEST_FILE.getName(), 100000000, TEST_FILE.getParentFile()); 

InputStream input = new FileInputStream(TEST_FILE); 
OutputStream os = diskFileItem.getOutputStream(); 
IOUtils.copy(input, os); 

System.out.println("diskFileItem.getString() = " + diskFileItem.getString());