Is Java IO the maximum file name length?

Different operating systems have a short file name length. Does Java have a limit on the length of the file name when working with files?

+11
java max file io file-io
Dec 22 '10 at 19:05
source share
7 answers

Java does not have a maximum file name length, except, obviously, to limit the length of the String string (which is the maximum length of the array, i.e. Integer.MAX_VALUE). Some JVMs may have a lower limit, but I never encounter such a problem (and I'm pretty sure that this will be a bug in relation to Java specifications), of course, the OS can have one.

+6
Dec 22 '10 at 19:09
source share

Windows has a file name length of 256 characters. Unix has pretty much what I think. Thus, although Java IO may not have a specific length (possibly a string length), it will depend on the implementation for the operating system.

+5
Dec 22 '10 at 19:25
source share

I did a test and got a length of 1150 characters.

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

and received

 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) 

This was done on the fat32 file system from Linux.

+2
Aug 31 '12 at 10:13
source share

Java can reach the maximum string length: The maximum string length in Java is the method of length () length <)>

+1
Dec 22 '10 at 19:13
source share

Java must turn all file name strings into bytes [] to interact with the OS. This means that for some character sets the limit will be less than 2 billion. However, I do not know any OS that supports file names of this length .;)

+1
Dec 22 '10 at 19:31
source share

glibc does not impose a restriction; see the GNU C Library, file restrictions

Macro: int PATH_MAX

A single system limit (if any) for the length of the entire file name (that is, an argument given to system calls, such as open), including the terminating null character.

Portability Note: The GNU C library does not apply this limit, even if PATH_MAX is defined.

Macro: int FILENAME_MAX

The value of this macro is an integer constant expression that represents the maximum length of a file name string. It is defined in stdio.h.

Unlike PATH_MAX, this macro is defined even if the actual limit is not set. In this case, its value is usually very large. This always happens on GNU / Hurd systems.

Usage note: do not use FILENAME_MAX as the size of the array in which to save the file name! You cannot make an array so big! Instead, use dynamic allocation (see the "Memory Allocation" section).

So, Java has no limit - apart from the maximum line length - since the underlying system does not. On Windows, pathes may have the \\ prefix? \ To be unlimited.

+1
May 7 '14 at 9:45
source share

Since the file name is the String method, and the length and position methods return int, I would say that Integer.MAX_VALUE is the maximum.

0
Dec 22 '10 at 19:12
source share



All Articles