从相对路径到文件获取Java文件大小

时间:2012-11-07 09:00:00

标签: java liferay filesize

如果我有一个文件的相对路径,如何在Java中获取文件大小,如:

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

我尝试了两个不同的字符串:

  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 =“/ documents / 19/21704 / 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); 

我总是在调试中,所有情况下的文件大小都是0。

也许值得注意的是file1和file2以及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> 

Pdf在新窗口中打开。所以它存储在我的服务器上。

我在这里做错了什么?我不能从bean获得文件大小?

任何答案都将不胜感激。

我在这里做错了什么?

2 个答案:

答案 0 :(得分: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 :(得分:1)

问题是你的“相对”路径表示为绝对路径(以“/”开头,读作FS根)。

相对文件路径应如下所示:

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

或者,您可以获取应用程序根文件夹File并撰写绝对路径:

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");