小明写了一段代码,想实现替换文件部分内容的目标,但是代码似乎写得有些问题,请你纠正并优化八戒的代码(请不要在原来的代码上做修改),并给出你的优化逻辑,优化点多多益善。 public static void main(String[] args) throws IOException { File file = new File("some file path"); List list1 = new ArrayList(); FileInputStream fileInputStream = new FileInputStream(file); byte[] bytes = new byte[1024]; int i = fileInputStream.read(bytes); if(i > 0) { do { i = fileInputStream.read(bytes); String s = new String(bytes, 0 , i); list1.add(s); } while(i != -1); } i = fileInputStream.read(bytes); String start = new String(bytes, 0, i); list1.add(start); for (int i1 = 0; i1 < list1.size(); i1++) { String s = (String) list1.get(i1); if(s.contains("1")) { s = s.replace("1", "a"); } else if(s.contains("2")) { s = s.replace("2", "b"); } else if(s.contains("3")) { s = s.replace("3", "c"); } else if(s.contains("4")) { s = s.replace("4", "d"); } list1.remove(i1); list1.add(i1, s); } FileOutputStream fos = new FileOutputStream(file); for (Object o : list1) { fos.write(o.toString().getBytes()); } }
时间: 2023-03-27 19:02:03 浏览: 69
你好,以下是我对小明代码的优化建议:
public static void main(String[] args) throws IOException {
File file = new File("some file path");
List<String> list1 = new ArrayList<>(); // 指定泛型
FileInputStream fileInputStream = new FileInputStream(file);
byte[] bytes = new byte[1024];
int i = ; // 初始化 i
while((i = fileInputStream.read(bytes)) != -1) { // 使用 while 循环读取文件
String s = new String(bytes, , i);
list1.add(s);
}
fileInputStream.close(); // 关闭文件输入流
String start = list1.get(); // 直接获取第一个元素
for (int i1 = ; i1 < list1.size(); i1++) { // 修正循环条件
String s = list1.get(i1); // 直接获取元素
if(s.contains("1")) {
s = s.replace("1", "a");
} else if(s.contains("2")) {
s = s.replace("2", "b");
} else if(s.contains("3")) {
s = s.replace("3", "c");
} else if(s.contains("4")) {
s = s.replace("4", "d");
}
list1.set(i1, s); // 直接替换元素
}
FileOutputStream fos = new FileOutputStream(file);
fos.write(start.getBytes()); // 先写入第一个元素
for (int i1 = 1; i1 < list1.size(); i1++) { // 从第二个元素开始写入
String s = list1.get(i1);
fos.write(s.getBytes());
}
fos.close(); // 关闭文件输出流
}
优化逻辑:
1. 使用 while 循环读取文件,避免重复读取文件和判断条件。
2. 使用 List<String> 指定泛型,避免类型转换。
3. 直接获取 List 中的元素,避免使用 remove 和 add 方法。
4. 先写入第一个元素,再写入其它元素,避免重复写入第一个元素。
5. 关闭文件输入流和输出流,避免资源泄漏。
阅读全文