Spring Boot Jar保存到现有文件



我想将数据与杰克逊保存到现有文件(更新它(,但是当我从jar运行项目时它不起作用。

我需要将JSON用作"数据库"(我知道这很愚蠢,但这是一个学校项目(,并且要在进行任何CRUD操作时加载并保存所有数据。当我使用IDE运行它时,它可以正常工作,但是当我尝试用作罐子时,它在读取ClassPathResource的文件时遇到了问题。

所以我有这样的方法来保存更改以:

private List<Item> items;
private ObjectMapper mapper;
private ObjectWriter writer;
public void saveData() {
        mapper = new ObjectMapper();
        writer = mapper.writer(new DefaultPrettyPrinter());
        try {
            writer.writeValue(new ClassPathResource("items.json").getFile(), items);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

,当我通过Intellij运行它时,它可以正常工作,但是当我以jar运行它时,它无法正常工作。我通过使用此问题的InputStream找到了一种解决数据的方法,并且方法看起来像这样:

public void loadData() {
        mapper = new ObjectMapper();
        try {
            ClassPathResource classPathResource = new ClassPathResource("items.json");
            InputStream inputStream = classPathResource.getInputStream();
            File tempFile = File.createTempFile("test", ".json");
                FileUtils.copyInputStreamToFile(inputStream, tempFile);
            System.out.println(tempFile);
            System.out.println(ItemDao.class.getProtectionDomain().getCodeSource().getLocation().getPath().toString());
            items = mapper.readValue(tempFile, new TypeReference<List<Item>>() {
            });
        } catch (IOException e) {
            items = null;
            e.printStackTrace();
        }
    }

,但我仍然不知道如何实际保存更改。我当时正在考虑使用FileOutputStream,但我什么也没取得成就。

所以我想在jar文件中进行此工作,并能够保存对同一文件的更改,感谢提前的帮助!

当您要进行读/写操作时,最好将文件保留在项目之外。运行JAR时,将文件名作为参数传递。例如-dfilename =/users/chappa/documents/items.json等。以此方式,您拥有绝对的路径,您可以在其上执行读/写操作

如果您使用的是Java 1.7或更高,则使用以下方法来编写数据。要读取数据,您可以使用Jackson API按原样加载JSON文件。

Path wipPath = Paths.get("/Users/chappa/Documents/items.json");
try (BufferedWriter writer = Files.newBufferedWriter(wipPath)) {
            for (String record : nosRecords) {
                writer.write(record);
            }
        }

以防万一您想使用IO流读取JSON,可以使用以下代码

        Path wipPath = Paths.get("/Users/chappa/Documents/items.json");
        try (BufferedReader reader = Files.newBufferedReader(wipPath)) {
            String line=null;
            while((line = reader.readLine()) != null) {
                    System.out.println(line);
            }
        }

最新更新