关于Java文件删除某一行(Java高手进)

Java API中没有提供删除文件中某一行的函数。传统的实现方法是利用BufferedReader一行行读出数据然后放入List集合,最后重新写进去文本,碰到要删除的行就跳过.这种解决方案碰到数据量小的文本没有问题。但是我现在要对几百万行的文本操作。这种办法肯定行不通。
这个文本里面的存放着几百万条sql语句,狂晕中。。。

我现在要实现的是,读出一条语句,执行sql,然后删除这条语句,继续执行下一条,删除,继续....

不要告诉我直接把文本丢到查询分析器里面执行,我试过,执行一段时间后内存暴了,所以才寻求用编程的方式实现。

问题我已经提出来了,只要能解决问题。不管你是告诉我思路,还是其他解决方案,直要把这几百万条数据插入数据库就行了。我就加分,本人穷的直有分。呵呵。

Java API中是没有这样的函数可以直接一调用的。但java.io.LineNumberReader类提供了定位行号的方法,或许可以有用。这是我的方法,试试看:
try {
//从文件中读取,LineNumberReader提供方法setLineNumber(int lineNumber)定位当前行号
LineNumberReader reader = new LineNumberReader(new FileReader("data.sql"));
BufferedWriter writer = new BufferedWriter(new FileWriter("temp.txt"));
String sql ;
while( (sql=reader.readLine())!=null ){
;//执行sql语句,这里也可将本行的语句sql保存到另一个temp.txt文件中,如果本行是被删除的语句,就不保存了,
//执行完后删除data.sql,保存temp.txt就行了,
//这样可以保证data.sql是里面的几百万条记录不被读取到内存
writer.write(sql);//在这里可以判断本行是否要被删除,如要保存就将其保存至temp.txt
}
reader.close();
writer.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-12
只定义一个字符串,读一行就执行一行,下一行还用这个字符串读。
读完了再删除文本文件。本回答被网友采纳
第2个回答  2013-08-15
使用readLine()读取文本中数据,得到一个流,将这个流存入一个数组中,再使用FOR循环输出并执行数组中的各个值,再将数据存入数据库;不过,楼主是否考虑过,几百万行SQL语句存入数据库中后得到的数据库文件大小其实并不比文本存储SQL语句的文件小多少的,而且其中像这种需要存储庞大数据量的,你必须要先定义数组的大小
第3个回答  2013-08-15
加根内存条,用查询分析器解析。
相似回答