如何解决在基于Gradle的Spring Boot项目的Resource文件夹中读写文件
我正在研究一个基于Gradle的Spring Boot项目。我需要从单元测试中执行以下公共方法updateCsvDataFile(),以提取新的数据文件以更新需要由源代码控制的main data.csv文件。在resources文件夹内,我创建了一个/ data文件夹,其中保存了data.csv文件,要提取的新文件保存在嵌套的/ data / to-esteded文件夹中。我想从/ data / to-be-esteded文件夹中处理(摄取)该要摄取的文件后,将其删除。当我使用getClass()。getResource访问文件以进行读写时,如下所示:
新文件(getClass()。getResource(“ / data / data.csv”)。getPath());
我看到它不是写入/src/main/resources/data/data.csv,而是写入/build/resources/main/data/data.csv。此外,要提取的文件不会从/ src / main / resources / data /要被删除的文件夹中删除,而是会从/ build / resources / main / data /要被删除的文件夹中删除。>
由于/ src / main / resources / data文件夹需要进行源代码控制,因此我想在此处进行更改,而不是在不受源代码控制的构建目录(/ build / resources / main / data)中进行更改。你知道该怎么做吗?预先感谢您的帮助!
public int updateCsvDataFile() throws IOException {
File toBeIngestedFolder = new File(getClass().getResource("/data/to-be-ingested").getPath());
File[] toBeIngestedFiles = folder.listFiles();
Map<String,String> dataMap = new HashMap<>();
for (final File toBeIngestedFile : toBeIngestedFiles) {
readFilesAndUpdateMap(toBeIngestedFile,sourceMap);
toBeIngestedFile.delete();
}
writeSourceMapToFile(sourceMap);
}
private void readFilesAndUpdateMap(File file,Map<String,String> sourceMap)
throws IOException {
InputStream inputStream = new FileInputStream(file);
CsvReader csvReader = new CsvReader(inputStream,StandardCharsets.UTF_8);
try {
csvReader.readHeaders();
while (csvReader.readRecord()) {
String key = csvReader.get(0);
String value = csvReader.get(1);
sourceMap.put(key,value);
}
}
finally {
csvReader.close();
inputStream.close();
}
}
private void writeSourceMapToFile(Map<String,String> sourceMap) throws IOException {
File file = new File(getClass().getResource("/data/data.csv").getPath());
FileWriter fileWriter = new FileWriter(file,true);
BufferedWriter writer = new BufferedWriter(fileWriter);
for (Map.Entry<String,String> entry : sourceMap.entrySet()) {
writer.write(entry.getKey()+","+entry.getValue());
writer.newLine();
}
writer.close();
fileWriter.close();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。