我不断获取文件或目录。我在一个创建Spring应用程序上下文的Groovy脚本中运行。我很容易使用相同类型的路径读取不同的文件。但是,我正在阅读的文件位于Spring的类路径中。此脚本可能由具有不同文件系统的任意数量的人运行,因此我无法对路径进行硬编码。我需要一条相对路径。
这是课堂上面的重要信息。
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()
}
}
}
Strings中的路径具有我期望的路径,没有多余的字符。
更新:
谢谢loteq你的答案也会起作用,并且比我们的最终结果有更好的时髦性。由于它是一种一种,我们没有时间改变你的更好的版本。
以下是适用于我们的代码,除了saveFilesToLocation设置为现在已存在的目录外,它与上面的代码相同。之前的那个不存在,我们需要像loteq一样调用mkdir 建议。
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++;
}
}