2011-03-14 95 views
7

我遇到了讀取.xlsx文件的問題。每當我使用WorkbookFactory.create(inputStream);時,會在/ tmp/poifiles目錄下創建一些隨機名稱的臨時文件。該目錄由第一個用戶的RW-R-R權限創建。所以當另一個用戶在同一臺​​機器上嘗試訪問這些文件時,他不能。更改使用Apache POI創建的臨時文件的位置

請給我建議任何方式

1)在/ tmp/poifiles/tmp目錄下,我怎麼能創造這些臨時文件,而不是總是(我使用RHEL V5.0)

2)我怎樣才能配置POI,例如從它讀取臨時文件的位置改變位置?

再次幫助解決我的問題,不同的用戶通過POI訪問相同的.xlsx文件是非常需要的。

回答

11

雅皮...我得到了解決方案....

POI使用以下方法創建臨時文件。

public static File createTempFile(String prefix, String suffix) 
{ 
    if (dir == null) { 
     dir = new File(System.getProperty("java.io.tmpdir"), "poifiles"); 
     dir.mkdir(); 
     if (System.getProperty("poi.keep.tmp.files") == null) { 
      dir.deleteOnExit(); 
     } 
    } 
    File newFile = new File(dir, prefix + rnd.nextInt() + suffix); 
    if (System.getProperty("poi.keep.tmp.files") == null) { 
     newFile.deleteOnExit(); 
    } 
    return newFile; 
} 

現在這裏,我們可以看到它的財產「java.io.tmpdir」獲取地址,並創建內部的poifiles目錄...

我改變java.io.tmpdir的位置由設置這個屬性(使用System.setProperty(「java.io.tmpdir」,「somepath」))到用戶特定的位置......和Voila ....每個用戶現在可以創建臨時文件在他們始終可訪問的位置,而不僅僅是第一個用戶獲得創建只能訪問他的目錄的權限...... !!!

3

這裏是你如何可以改變從那裏POI程序讀取臨時文件的位置,如果你不能夠更改系統屬性「java.io.tmpdir」

File dir = new File("somepath"); 
dir.mkdir(); 
TempFile.setTempFileCreationStrategy(new TempFile.DefaultTempFileCreationStrategy(dir)); 

這是由Apache POI TempFile helper class

驅動
相關問題