简体   繁体   中英

Get file size in Java from relative path to file

How can I get file size in Java if I have a relative path to a file such as:

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

I tried with two diferent strings:

  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;

In this case s="/documents/19/21704/file2.pdf";

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

I tried with:

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

and with:

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

and also with (if the problem is in not providing full path):

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

I am always getting in debug that filesizes in all cases are 0.

Maybe is worth noticing that the three attributes of file1 and file2 and file3 are always:

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

Since I am also using Liferay I also tried their utility.

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

I also should notice that in my .xhtml view I can access the file with:

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

Pdf opens in a new window. So it is stored on my server.

What am I doing wrong here? That I cant get the file size from bean?

Any answer would be greatly appreciated.

What am I doing wrong here?

In Java, you can use the File.length() method to get the file size in bytes.

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

if(file.exists()){

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

The problem is that your "relative" path is expressed as an absolute path (begining with "/", which is read as FS root).

A relative file path should look like:

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

Or, you could get your application root folder File and compose the absolute path:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM