不同的操作系统具有不同的文件名最大长度。在处理文件时,Java是否对文件名长度有任何限制?
答案 0 :(得分:7)
Java没有最大文件名长度,但字符串最大长度限制(即数组最大长度,即Integer.MAX_VALUE)显然除外。也许有些JVM有一个下限,但我从来没有遇到过这样的问题(我几乎可以肯定它会是一个关于Java规范的错误),当然操作系统可以有一个。
答案 1 :(得分:5)
Windows的文件名长度为256个字符。我相信Unix也有同样的东西。因此,虽然Java IO可能没有定义的长度(可能确定字符串长度),但它将取决于操作系统的实现。
答案 2 :(得分:2)
我做了一个测试,得到了大约1150个字符长度。
if (!destFile.exists()) {
try {
destFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
} else
return;
...
try {
source = new FileInputStream(sourceFile).getChannel();
destination = new FileOutputStream(destFile).getChannel();
destination.transferFrom(source, 0, source.size());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
得到了
java.io.FileNotFoundException: /media/34A0-486C/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41/42/43/44/45/46/47/48/49/50/51/52/53/54/55/56/57/58/59/60/61/62/63/64/65/66/67/68/69/70/71/72/73/74/75/76/77/78/79/80/81/82/83/84/85/86/87/88/89/90/91/92/93/94/95/96/97/98/99/100/101/102/103/104/105/106/107/108/109/110/111/112/113/114/115/116/117/118/119/120/121/122/123/124/125/126/127/128/129/130/131/132/133/134/135/136/137/138/139/140/141/142/143/144/145/146/147/148/149/150/151/152/153/154/155/156/157/158/159/160/161/162/163/164/165/166/167/168/169/170/171/172/173/174/175/176/177/178/179/180/181/182/183/184/185/186/187/188/189/190/191/192/193/194/195/196/197/198/199/200/201/202/203/204/205/206/207/208/209/210/211/212/213/214/215/216/217/218/219/220/221/222/223/224/225/226/227/228/229/230/231/232/233/234/235/236/237/238/239/240/241/242/243/244/245/246/247/248/249/250/251/252/253/254/255/256/257/258/259/260/261/262/263/264/265/266/267/268/269/270/271/272/273/274/275/276/277/278/279/280/281/282/283/284/285/286/287/288/289/290/291/292/293/294/295/296/297/298/299/300/301/302/303/304/305/306/307/308/309/310/0.mp3
(No such file or directory)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:194)
at java.io.FileOutputStream.<init>(FileOutputStream.java:145)
这是在linux的fat32文件系统上完成的。
答案 3 :(得分:1)
Java可能会达到最大字符串长度:String's Maximum length in Java - calling length() method
答案 4 :(得分:1)
Java需要将所有文件名字符串转换为byte []以与OS交互。这意味着对于某些字符集,限制将小于20亿。但是我不知道任何支持这个长度的文件名的操作系统。 ;)
答案 5 :(得分:1)
glibc没有施加限制,请参阅The GNU C Library, limits for files
宏:int PATH_MAX
统一系统限制(如果有),表示整个文件名的长度(即,给予系统调用的参数,例如open),包括终止空字符。
可移植性注意:即使定义了PATH_MAX,GNU C库也不会强制实施此限制。
宏:int FILENAME_MAX
此宏的值是一个整数常量表达式,表示文件名字符串的最大长度。它在stdio.h中定义。
与PATH_MAX不同,即使没有施加实际限制,也会定义此宏。在这种情况下,其值通常是非常大的数值。在GNU / Hurd系统中总是如此。
使用备注:不要将FILENAME_MAX用作存储文件名的数组大小!你不可能制造出那么大的阵列!请改为使用动态分配(请参阅内存分配)。
因此,Java没有限制 - 除了String的最大长度 - 因为底层系统没有。在Windows上,pathes可能以\\?\为前缀,无限制。
答案 6 :(得分:0)
由于文件名是一个String,长度和位置方法返回一个int,我想最大值是Integer.MAX_VALUE。