0

次のようなファイルへの相対パスがある場合、Java でファイル サイズを取得するにはどうすればよいですか。

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

私は2つの異なる文字列で試しました:

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

2 番目のケースでは、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 の 3 つの属性が常に次のようになっていることに注意してください。

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

また、.x​​html ビューで、次の方法でファイルにアクセスできることにも注意してください。

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

PDFが別窓で開きます。したがって、それは私のサーバーに保存されます。

ここで何が間違っていますか?ビーンからファイルサイズを取得できませんか?

どんな答えでも大歓迎です。

ここで何が間違っていますか?

4

2 に答える 2

1

Java では、File.length() メソッドを使用して、ファイル サイズをバイト単位で取得できます。

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

if(file.exists()){

double bytes = file.length();
}
System.out.println("bytes : " + bytes);
于 2012-11-07T09:06:39.543 に答える
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");
于 2012-11-07T09:07:52.233 に答える