Does Java IO have a maximum file name length limit?

17,801

Solution 1

Java has no maximum file name length, except obviously for the String max length limit (which is the array max length, i.e. Integer.MAX_VALUE). Maybe some JVMs have a lower limit but I never run into such a problem (and I'm almost certain it would be a bug with respect to Java specifications), certainly OSes can have one.

Solution 2

Windows has a 256 character filename length. Unix has about the same I believe. So while the Java IO may not have a defined length (String length maybe for sure), it would be dependent on the implementation for the operating system.

Solution 3

I had made a test and got ~ 1150 chars max length.

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 got

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 a fat32 filesystem from linux.

Solution 4

Java needs to turn all filename strings into a byte[] to interact with the OS. This means for some character sets the limit will be less than 2 billion. However I don't know of any OS which supports file names of this length. ;)

Solution 5

Java may hit the maximal String length: String's Maximum length in Java - calling length() method

Share:
17,801
Dónal Boyle
Author by

Dónal Boyle

Software Engineer based in Boston, MA.

Updated on June 04, 2022

Comments

  • Dónal Boyle
    Dónal Boyle almost 2 years

    Different operating systems have different file name max lengths. Does Java have any limit on file name length when working with files?