Различные операционные системы имеют малую длину имени файла. Имеет ли Java ограничение на длину имени файла при работе с файлами?
Является ли Java IO максимальной длиной имени файла?
Ответ 1
Java не имеет максимальной длины имени файла, кроме, очевидно, для ограничения длины строки String (которая является максимальной длиной массива, то есть Integer.MAX_VALUE). Возможно, некоторые JVM имеют нижний предел, но я никогда не сталкиваюсь с такой проблемой (и я почти уверен, что это будет ошибкой в отношении спецификаций Java), конечно, ОС может иметь один.
Ответ 2
Windows имеет длину имени файла в 256 символов. У Unix есть примерно то же, что я считаю. Таким образом, хотя Java IO может не иметь определенной длины (возможно, длина строки), она будет зависеть от реализации для операционной системы.
Ответ 3
Я сделал тест и получил длину 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)
Это было сделано в файловой системе fat32 из Linux.
Ответ 4
Java может достигать максимальной длины строки: Максимальная длина строки в Java - метод длины() length <) >
Ответ 5
Java должна превратить все строки имен файлов в байт [] для взаимодействия с ОС. Это означает, что для некоторых наборов символов предел будет меньше 2 миллиардов. Однако я не знаю ни одной ОС, которая поддерживает имена файлов этой длины.;)
Ответ 6
glibc не налагает ограничение, см. Библиотека GNU C, ограничения для файлов
Макро: int PATH_MAX
Единый системный предел (если таковой имеется) для длины всего имени файла (то есть аргумента, данного системным вызовам, такого как открытый), включая завершающий нулевой символ.
Примечание по переносимости: библиотека GNU C не применяет этот предел, даже если определена PATH_MAX.
Макро: int FILENAME_MAX
Значение этого макроса представляет собой целочисленное константное выражение, которое представляет максимальную длину строки имени файла. Он определен в stdio.h.
В отличие от PATH_MAX, этот макрос определяется, даже если фактический предел не установлен. В таком случае его значение, как правило, очень большое. Это всегда происходит в системах GNU/Hurd.
Примечание по использованию: не используйте FILENAME_MAX как размер массива, в котором необходимо сохранить имя файла! Вы не можете сделать массив такой большой! Вместо этого используйте динамическое распределение (см. Раздел "Распределение памяти" ).
Итак, у Java нет предела - кроме максимальной длины строки - поскольку базовая система не имеет. В Windows, pathes может иметь префикс \\? \, Чтобы быть неограниченным.
Ответ 7
Так как имя файла - это метод String, а методы length и position возвращают int, я бы сказал, что максимальным является Integer.MAX_VALUE.