Вопрос по windows, java, file – Как Java обходит ограничения Windows MAX_PATH WinAPI

4

Кто-нибудь знает, как Java способна обойти ограничения Windows MAX_PATH. Используя приведенный ниже код, я смог создать действительно длинный путь в Java и выполнить ввод / вывод, что было бы невозможно при использовании окон без префикса \\? \.

<code>public static void main(String[] args) throws IOException {
    BufferedWriter bufWriter = null;
    try {
        StringBuilder s = new StringBuilder();
        for (int i = 0; i < 130; i++) {
            s.append("asdf\\");
        }
        String filePath = "C:\\" + s.toString();;
        System.out.println("File Path = " + filePath);
        File f = new File(filePath);
        f.mkdirs();
        f = new File(f, "dummy.txt");
        System.out.println("Full path = " + f);
        bufWriter = new BufferedWriter(new FileWriter(f));
        bufWriter.write("Hello"); 

    } 
    catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        if (bufWriter != null) {
            bufWriter.close();
        }
    }
}
</code>

Ваш Ответ

1   ответ
5

От JVM'scanonicalize_md.c:

/* copy \\?\ or \\?\UNC\ to the front of path*/
WCHAR* getPrefixed(const WCHAR* path, int pathlen) {
    [download JVM source code (below) to see implementation]
}

ФункцияgetPrefixed называется

функциейwcanonicalize если((pathlen = wcslen(path)) > MAX_PATH - 1) функциейwcanonicalizeWithPrefix.

Я не отслеживал цепочку вызовов дальше этого, но я предполагаю, что JVM всегда использует эти подпрограммы канонизации перед доступом к файловой системе, и поэтому всегда находит тот или иной код. Если вы хотите отследить цепочку вызовов дальше, вы также можете принять участие в радости просмотра исходного кода JVM! Скачать по адресу:http: //download.java.net/openjdk/jdk6

Да, я исправил это. Благодарность Rajiv
@ Раджив Я обновил свой ответ кодом из JVM Mike Clark

Похожие вопросы