小明写了一段代码,想实现替换文件部分内容的目标,但是代码似乎写得有些问题,请你纠正并优化这段代码,并给出你的优化逻辑,优化点多多益善。 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-05-30 08:06:56 浏览: 145
以下是我对代码的优化和修改建议:
1. 在定义List时,应该指定泛型类型,避免出现未经检查的转换警告。
2. 在读取文件内容时,应该使用try-with-resources语句,避免忘记关闭文件流导致资源泄漏。
3. 在读取文件内容时,应该使用StringBuilder来拼接字符串,避免频繁的对象创建和销毁。
4. 在读取文件内容时,应该使用while循环来读取文件内容,避免只读取了一部分内容。
5. 在替换文件内容时,应该使用StringBuilder来进行替换,避免频繁的对象创建和销毁。
6. 在替换文件内容时,应该使用正则表达式来进行替换,可以更加灵活方便。
7. 在遍历List时,应该使用Iterator来遍历,避免在遍历时修改List导致ConcurrentModificationException异常。
8. 在写入文件时,应该使用try-with-resources语句,避免忘记关闭文件流导致资源泄漏。
9. 在写入文件时,应该使用byte[]数组来一次性写入数据,避免频繁的IO操作。
10. 在文件操作时,应该进行异常处理,避免程序出现异常而导致程序崩溃。
综上所述,以下是我优化后的代码:
public static void main(String[] args) {
File file = new File("some file path");
List<String> list1 = new ArrayList<>();
try (FileInputStream fileInputStream = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {
StringBuilder sb = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
sb.append(line).append(System.lineSeparator());
}
String content = sb.toString();
content = content.replaceAll("1", "a")
.replaceAll("2", "b")
.replaceAll("3", "c")
.replaceAll("4", "d");
try (FileOutputStream fos = new FileOutputStream(file)) {
fos.write(content.getBytes(StandardCharsets.UTF_8));
}
} catch (IOException e) {
e.printStackTrace();
}
}
阅读全文