Groovy — проблема с созданием файла: неверный синтаксис имени файла, имени каталога или метки тома

Я запускаю сценарий, созданный в Groovy из пользовательского интерфейса Soap, и сценарий должен генерировать множество файлов. Эти файлы также имеют в названии два числа из списка (все комбинации в этом списке разные), а доступных комбинаций 1303, а скрипт генерирует всего 1235 файлов.

Часть кода:

filename = groovyUtils.projectPath + "\\" + "$file"+"_OK.txt";
targetFile = new File(filename);
targetFile.createNewFile();

где $file на самом деле является той частью имени файла, которая включает в себя эти 2 комбинации из этого списка:

file = "abc" + "-$firstNumer"+"_$secondNumber"

Для тех файлов, которые не созданы, возвращается сообщение: «Неверный синтаксис имени файла, имени каталога или метки тома».

Я попытался указать другой путь:

filename = "D:\\rez\\" + "\\" + "$file"+"_OK.txt";
targetFile = new File(filename);
targetFile.createNewFile(); 

а также:

File parentFolder = new File("D:\\rez\\");
File targetFile = new File(parentFolder, "$file"+"_OK.txt");
targetFile.createNewFile();

(который я нашел здесь: Каковы возможные причины java.io.IOException: Неверный синтаксис имени файла, имени каталога или метки тома), но ничего не сработало.

Я понятия не имею, где проблема. Странно, что 1235 файлов создаются нормально, а остальные 68 вообще не создаются.

Спасибо,


person Paul    schedule 28.10.2010    source источник
comment
[-1] Проблема не воспроизводима. Спрашивающий не ответил на ответы.   -  person robbbert    schedule 25.11.2010


Ответы (2)


Я предполагаю, что некоторые файлы имеют недопустимые символы в своих путях. Какие именно символы являются незаконными, зависит от платформы, например. в винде они

\ / : * ? " < > |

Почему бы вам не записать полный путь к файлу перед вызовом targetFile.createNewFile();, а также указать, был ли этот метод успешным или нет, например.

filename = groovyUtils.projectPath + "\\" + "$file"+"_OK.txt";
targetFile = new File(filename);
println "attempting to create file: $targetFile"

if (targetFile.createNewFile()) {
    println "Successfully created file $targetFile"
} else {
    println "Failed to create file $targetFile"
}

Когда процесс будет завершен, проверьте журналы, и я подозреваю, что вы увидите общий шаблон в сообщениях «Не удалось создать файл…».

person Dónal    schedule 28.10.2010

File.createNewFile() возвращает false, когда файл или каталог с таким именем уже существует. Во всех других случаях сбоя (безопасность, ввод-вывод) выдается исключение.

Оцените возвращаемое значение createNewFile() или дополнительно используйте метод File.exists():

File file = new File("foo")
// works the first time
createNewFile(file)
// prints an error message
createNewFile(file)

void createNewFile(File file) {
    if (!file.createNewFile()) {
        assert file.exists()
        println file.getPath() + " already exists."
    }
}
person robbbert    schedule 28.10.2010