2016-05-01 5 views
1

"/"ディレクトリにtest.txtとtest1.txtの2つのファイルがあるとします。java.io.file長いパスは切り捨てられますか?

ファイル名が4096バイトより短い場合、ファイルは存在し、それ以外の場合は存在しません。

私のOSはアンドロイドで、ファイルシステムはext4です。

私はこの背後にある理由を知りたいと思います。誰かに教えてもらえますか?

String path = new String(new char[4086]).replace("\0\0\0", "../") 
String filename = "/"+path+test.txt 
File file = new File(filename); 
file.getPath().length(); //return 4095 
file.exists(); //return true 

String path = new String(new char[4086]).replace("\0\0\0", "../") 
String filename = "/"+path+test1.txt 
File file = new File(filename); 
file.getPath().length(); //return 4096 
file.exists(); //return false 
+0

どのOSとファイルシステムですか? – sisyphus

+0

私のOSはアンドロイドで、ファイルシステムはext4です。 – javapuzzle

答えて

2

これは、ファイルシステムのパス制限によって発生する可能性があります。使用しているシステムは何ですか?

(申し訳ありませんが、これはより多くの答えよりもコメントのようですが、私はあなたのポストにコメントするのに十分なポイントを持っていない...)

+0

私のファイルシステムはext4 – javapuzzle

+0

です.Wikipediaの[this](https://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits)の記事を参照すると、ext4のパス制限はありません。 Androidの場合、これは別の状況になる可能性があります。 *ファイル名の暗号化がある可能性があります *「元の」ext4とはパスの制限が異なる場合があります – Kryptur

1

限度は、オペレーティング・システムによって課されます。たとえば:

私はこの背後にある理由を知りたいです。

Javaはネイティブライブラリを介してオペレーティングシステムとやり取りし、ネイティブライブラリには個々のファイル名とパス名の両方の長さにハード制限があります。 Javaは制限に従わなければなりません。

関連する問題