Я продолжаю получать файл или каталог не существует. Я запускаю скрипт Groovy, создающий контекст приложения Spring. Я легко читаю в другом файле, используя тот же тип пути. Тем не менее, файл, который я читаю, находится в пути класса Spring. Этот скрипт может запускаться любым количеством людей с разными файловыми системами, поэтому я не могу жестко закодировать путь. Мне нужен относительный путь.Сохранение нового файла в любой каталог Groovy
Это выше в классе, но важная информация.
private static String saveFilesToLocation = "/retrieve/";
Вот код.
CSVReader reader = new CSVReader(new InputStreamReader(balanceFile), SEPARATOR)
String[] nextLine
int counter = 0;
while ((nextLine = reader.readNext()) != null) {
counter++
if (nextLine != null && (nextLine[0] != 'FileLocation')) {
counter++;
try {
//Remove 0, only if client number start with "0".
String fileLocation = nextLine[0];
byte[] fileBytes = documentFileService.getFile(fileLocation);
if (fileBytes != null) {
String fileName = fileLocation.substring(fileLocation.indexOf("/") + 1, fileLocation.length());
File file = new File(saveFilesToLocation+fileLocation);
file.withOutputStream {
it.write fileBytes
}
println "$counter) Wrote file ${fileLocation} to ${saveFilesToLocation+fileLocation}"
} else {
println "$counter) UNABLE TO RETRIEVE FILE: $fileLocation";
}
} catch (Exception e) {
e.printStackTrace()
}
}
}
Пути в строках имеют то, что я ожидал бы в них, никаких дополнительных символов.
UPDATE:
Спасибо loteq Ваш ответ будет работать также, и имеет лучшую grooviness, чем наш конечный результат, который работал. Поскольку это своего рода одно, у нас нет времени, чтобы перейти на более приятную версию.
Вот код, который сработал для нас, он идентичен выше, за исключением того, что saveFilesToLocation установлен в каталог, который уже существует. Тот, который раньше не существовал, и нам нужно было бы назвать mkdir, как loteq .
private static String saveFilesToLocation = "/tmp/retrieve/";
CSVReader reader = new CSVReader(new InputStreamReader(balanceFile), SEPARATOR)
String[] nextLine
int counter = 0;
while ((nextLine = reader.readNext()) != null) {
if (nextLine != null && (nextLine[0] != 'FileLocation')) {
counter++;
try {
//Remove 0, only if client number start with "0".
String fileLocation = nextLine[0];
byte[] fileBytes = documentFileService.getFile(fileLocation);
if (fileBytes != null) {
String fileName = fileLocation.substring(fileLocation.indexOf("/") + 1, fileLocation.length());
File file = new File(saveFilesToLocation+fileName);
file.withOutputStream {
it.write fileBytes
}
println "$counter) Wrote file ${fileLocation} to ${saveFilesToLocation+fileLocation}"
} else {
println "$counter) UNABLE TO RETRIEVE FILE: $fileLocation";
}
} catch (Exception e) {
e.printStackTrace()
}
} else {
counter++;
}
}