有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (6) 个答案

  1. # 2 楼答案

    glibc没有设置限制,请参见The GNU C Library, limits for files

    Macro: int PATH_MAX

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

    Portability Note: The GNU C Library does not enforce 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 there is no actual limit imposed. In such a case, its value is typically a very large number. This is always the case on GNU/Hurd systems.

    Usage Note: Don't use FILENAME_MAX as the size of an array in which to store a file name! You can't possibly make an array that big! Use dynamic allocation (see Memory Allocation) instead.

    因此,Java没有限制——除了字符串的最大长度——因为底层系统没有限制。在Windows上,路径的前缀可能是\\?\是无限的

  2. # 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)
    

    这是在linux的fat32文件系统上完成的

  3. # 4 楼答案

    Windows的文件名长度为256个字符。我相信Unix也有类似的功能。因此,尽管Java IO可能没有定义的长度(字符串长度可能是确定的),但它将取决于操作系统的实现

  4. # 5 楼答案

    Java没有最大文件名长度,除了字符串最大长度限制(即数组最大长度,即Integer.max_值)之外。也许有些JVM有一个下限,但我从来没有遇到过这样的问题(我几乎可以肯定这是Java规范的一个bug),当然操作系统也可以有一个

  5. # 6 楼答案

    Java需要将所有文件名字符串转换为一个字节[],以便与操作系统交互。这意味着对于某些字符集,限制将小于20亿。但是,我不知道有哪个操作系统支持这种长度的文件名