2012-11-07 165 views
0

我怎樣才能得到文件的大小在Java中,如果我有這樣的一個文件的相對路徑:獲取文件大小,文件

String s = "/documents/19/21704/file2.pdf/0929c695-d023-49d7-a8ff-65ccea46bebc" 

我想有兩個diferent字符串:

String[] separatedPath = s.split("/"); 
    List<String> wordList = Arrays.asList(separatedPath); 
    String ret = "/" + wordList.get(1) + "/" + wordList.get(2) + "/" + wordList.get(3)+ "/" + wordList.get(4);  
    s = ret; 

在這種情況下s =「/ documents/19/21704/file2.pdf」;

在第二種情況下S = 「/文件/21704分之19/ file2.pdf/0929c695-d023-49d7-a8ff-65ccea46bebc」

我嘗試:

File file1 = new File(s); 
long filesize = file1.length(); 

並用:

String filePath = new File(s).toURI().getPath(); 
File file2 = new File(filePath); 
long filesize2 = file1.length(); 

,並與(如果問題出在不提供完整路徑):

String absolutePath = FileUtil.getAbsolutePath(file1); 
File file3 = new File(absolutePath); 
long filesize3 = file3.length(); 
byte[] bytes1=FileUtil.getBytes(file1); 
byte[] bytes2=FileUtil.getBytes(file2); 
byte[] bytes3=FileUtil.getBytes(file3); 

我一直在調試該的filesizes在所有情況下都爲0

也許是值得注意獲得該文件1和文件2的三個屬性和file3的總是:

filePath: which is always null; 
path: "/documents/19/21704/liferay-portlet-development.pdf" 
prefixLength: 1 

因爲我也是用的Liferay我也嘗試過他們的效用。

long compId = article.getCompanyId(); 
    long contentLength = DLStoreUtil.getFileSize(compId, CompanyConstants.SYSTEM, s); 

我也應該注意到,在我.xhtml觀點我可以訪問文件:

<a target="_blank" 
href="/documents/19/21704/file2.pdf/0929c695-d023-49d7-a8ff-65ccea46bebc"> 
    file2.pdf 
</a> 

全文在新窗口中打開。所以它存儲在我的服務器上。

我在這裏做錯了什麼?我不能從bean中獲取文件大小?

任何答案將不勝感激。

我在這裏做錯了什麼?

+0

我想'/ documents/19/21704/file2.pdf'是一個文件,其餘部分是一個部分裏面沒有另一個文件。 –

+0

你正在linux/unix上運行嗎? – giorashc

+0

那麼..服務器上'/documents/19/21704/file2.pdf'的路徑是什麼?這是一個萬維網路徑,所以你需要制定出一個基於它的服務器路徑。根據你提供的信息,它可以是任何東西,所以你需要告訴我們你的文件系統上的路徑是什麼(例如相對於你正在執行的代碼)。 – eis

回答

2

在Java中,您可以使用File.length()方法以字節爲單位獲取文件大小。

File file =new File("c:\\java_xml_logo.jpg"); 

if(file.exists()){ 

double bytes = file.length(); 
} 
System.out.println("bytes : " + bytes); 
1

問題是你的「相對」路徑被表示爲絕對路徑(用「/」開始,它被讀作FS根)。

相對文件路徑應該是這樣的:

  • documents/19/21704/file2.pdf/0929c695-d023-49d7-a8ff-65ccea46bebc
  • ./documents/19/21704/file2.pdf/0929c695-d023-49d7-a8ff-65ccea46bebc

或者,你可以讓你的應用程序的根文件夾的文件和撰寫的絕對路徑:

File rootFolder =new File("path to your app root folder"); 

File myfile=new File(rootFolder, "/documents/19/21704/file2.pdf/0929c695-d023-49d7-a8ff-65ccea46bebc"); 
+0

現在我的變量「file1」,「file2」,「file3」中的「路徑」是/ home/roq/Documents/apps/eclipseLiferay/documents/19 /21704/file2.pdf/0929c695-d023-49d7-a8ff-65ccea46bebc。但仍然大小爲0. – necker

+0

您是否檢查過每種情況下'file.exists()'方法返回的內容? –

+0

剛剛做到了。它在任何情況下都找不到該文件。我用三個字符串「documents/19/21704/file2.pdf/0929c695-d023-49d7-a8ff-65ccea46bebc」,「/ documents19/21704/file2.pdf/0929c695-d023-49d7-a8ff-65ccea46bebc」和「./documents/19/21704/file2.pdf/0929c695-d023-49d7-a8ff-65ccea46bebc」。它不會在任何情況下找到該文件。嗯。 – necker