怎么用IO流删除指定行数的内容啊,真的很着急,麻烦彭于晏,吴彦祖回答一下
import java.io.*;
public class DeleteLineDemo {
public static void deleteLines(String filePath, int[] lineNumbers) throws IOException {
File oldFile = new File(filePath);
File newFile = new File(filePath + ".tmp"); // 新建临时文件
BufferedReader reader = new BufferedReader(new FileReader(oldFile));
BufferedWriter writer = new BufferedWriter(new FileWriter(newFile));
String line;
int lineNumber = 0;
while ((line = reader.readLine()) != null) {
lineNumber++;
if (!contains(lineNumbers, lineNumber)) { // 判断当前行是否需要保留
writer.write(line);
writer.newLine();
}
}
reader.close();
writer.close();
oldFile.delete(); // 删除旧文件
newFile.renameTo(oldFile); // 重命名临时文件为原文件名
}
private static boolean contains(int[] arr, int target) {
for (int num : arr) {
if (num == target) {
return true;
}
}
return false;
}
public static void main(String[] args) throws IOException {
String filePath = "test.txt";
int[] lineNumbers = {2, 4}; // 需要删除的行号
deleteLines(filePath, lineNumbers);
}
}
https://blog.csdn.net/weixin_74057851/article/details/129906824
FileInputStream类的其他常用方法:
int available() : 返回流当中剩余的没有读到的字节数量
long skip(long n) : 跳过几个字节不读
代码演示如下:
package com.bjpowernode.java.io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamTest04 {
public static void main(String[] args) {
// 创建FileInputStream对象
FileInputStream fis =null;
try {
fis =new FileInputStream("chapter15/src/com/bjpowernode/java/io/UserFile");
// 还没有读的时候文件中的总字节数量:
// System.out.println("文件中的总字节数量:"+fis.available()); // 5
// 读一个字节
// int readData =fis.read();
// 文件中还剩下可以读的字节数量是: (文件中数据:abcde)
// System.out.println("剩下多少字节没有读:"+fis.available()); // 4
// int available() 这个方法可以怎么用呢?
// : 当文件中的数据不太大的时候可以直接把总字节数量放入一个数组里面一次读取完(注意:当文件过大时不能直接放到数组当中:扩容问题影响效率)
byte[] bytes =new byte[fis.available()]; // 直接把文件中的总字节数量放到数组里面
// 不需要循环了
// 直接一次读就行了
int readData1 =fis.read(bytes); // 读到数组里面 读到的是字节数量
System.out.println(readData1); // 5
System.out.println(new String(bytes)); //abcde 直接把数组转换成字符串
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis != null) {
// 关闭流
try {
fis.close();
System.out.println("流关闭成功~");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
解决方案:
为了删除文件中的特定行,我们可以使用Java的IO流中的BufferedReader和BufferedWriter。
首先,我们需要创建一个新文件,并将原始文件的内容按行读取到缓冲区中。在读取每行时,我们需要检查该行是否等于我们要删除的行。如果不是该行,则将其写入新文件中。
以下是具体的步骤:
File inputFile = new File("originalFile.txt");
File outputFile = new File("newFile.txt");
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));
String line;
int lineNumber = 1; // 初始化行数
while ((line = reader.readLine()) != null) {
if (!line.equals("line to delete")) { // 检查该行是否需要删除
writer.write(line);
writer.newLine();
}
lineNumber++; // 增加行数
}
reader.close();
writer.close();
完整代码如下:
import java.io.*;
public class DeleteFileLine {
public static void main(String[] args) throws IOException {
File inputFile = new File("originalFile.txt");
File outputFile = new File("newFile.txt");
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));
String line;
int lineNumber = 1;
while ((line = reader.readLine()) != null) {
if (lineNumber != 2) { // 删除第二行
writer.write(line);
writer.newLine();
}
lineNumber++;
}
reader.close();
writer.close();
}
}
上述代码会读取originalFile.txt文件内容并逐行写入到newFile.txt文件中。如果需要删除某些行,请根据需要调整代码。