【修改】 生成json提示被占用问题

This commit is contained in:
dlaren
2025-07-15 16:15:47 +08:00
parent 1ad5f3a018
commit eb971b8c26
3 changed files with 43 additions and 31 deletions

View File

@@ -19,9 +19,7 @@ import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.*;
import java.math.BigDecimal;
import java.util.*;
@@ -274,25 +272,30 @@ public class AutoForWinEdgeSettingServiceImpl implements AutoForWinEdgeSettingSe
File file = new File(filePath);
try {
// 如果文件存在且文件不为空,尝试读取现有内容
Map<String, String> existingMap = null;
Map<String, String> existingMap = new HashMap<>();
if (file.exists() && file.length() > 0) {
existingMap = objectMapper.readValue(file, Map.class);
try (InputStream fis = new FileInputStream(file)) {
existingMap = objectMapper.readValue(fis, Map.class);
}
}
// 如果文件为空或无法读取初始化为空的Map
if (existingMap == null) {
existingMap = new HashMap<>();
}
// 合并新的Map数据
existingMap.putAll(map);
// 将合并后的Map写入到文件
objectMapper.writeValue(file, existingMap);
try (OutputStream fos = new FileOutputStream(file, false);
BufferedOutputStream bos = new BufferedOutputStream(fos)) {
objectMapper.writeValue(bos, existingMap);
bos.flush(); // 强制刷新
}
// 可选占用测试
boolean released = file.renameTo(file);
System.out.println("文件释放状态: " + released);
} catch (IOException e) {
e.printStackTrace();
}
return "学生答案已经写入到 " + filePath;
}

View File

@@ -12,13 +12,12 @@ import com.example.exam.exam.service.tenant.SystemTenantService;
import com.example.exam.exam.utils.c.LogFileUtils;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.*;
import java.math.BigDecimal;
import java.util.*;
@@ -282,29 +281,35 @@ public class AutoForChoiceServiceImpl implements AutoForChoiceService {
File file = new File(filePath);
try {
// 如果文件存在且文件不为空,尝试读取现有内容
Map<String, String> existingMap = null;
Map<String, String> existingMap = new HashMap<>();
if (file.exists() && file.length() > 0) {
existingMap = objectMapper.readValue(file, Map.class);
try (InputStream fis = new FileInputStream(file)) {
existingMap = objectMapper.readValue(fis, Map.class);
}
}
// 如果文件为空或无法读取初始化为空的Map
if (existingMap == null) {
existingMap = new HashMap<>();
}
// 合并新的Map数据
existingMap.putAll(map);
// 将合并后的Map写入到文件
objectMapper.writeValue(file, existingMap);
try (OutputStream fos = new FileOutputStream(file, false);
BufferedOutputStream bos = new BufferedOutputStream(fos)) {
objectMapper.writeValue(bos, existingMap);
bos.flush(); // 强制刷新
}
// 可选占用测试
boolean released = file.renameTo(file);
System.out.println("文件释放状态: " + released);
} catch (IOException e) {
e.printStackTrace();
}
return "学生答案已经写入到 " + filePath;
}
public static String convertToLetter(int number) {
// 判断是否在 1 到 26 的范围内
if (number >= 1 && number <= 26) {

View File

@@ -29,14 +29,18 @@ public class LogFileUtils {
file.getParentFile().mkdirs(); // 创建父目录
file.createNewFile();
}
writer = new BufferedWriter(new FileWriter(file, true)); // 追加写入模式
try (BufferedWriter writer = new BufferedWriter(new FileWriter(file, true))) {
writer.write(""); // 可选写入内容
}
} catch (IOException e) {
log.error(e.getMessage());
throw new RuntimeException("无法创建日志文件: " + e.getMessage());
throw new RuntimeException("无法创建日志文件: " + e.getMessage(), e);
}
}
/**
* 写入文本,自动换行
* @param content 写入的文本