黑马程序员技术交流社区
标题:
关于IO流的一点问题
[打印本页]
作者:
yin1031468524
时间:
2013-6-4 17:50
标题:
关于IO流的一点问题
想给指定文本 a.txt 增加一行数据 但是用BufferedWriter 的 write方法 把之前a.txt 文件里的内容都给覆盖了,还有如果想修改或删除 a.txt里的某一行 能直接得到并修改删除吗?
希望给一些io的建议,都被搞糊涂了,求大神们指教、、、
作者:
娄田田
时间:
2013-6-4 18:13
使用FileOutputStream(File file, boolean append)这个构造方法,当第二个参数为true的时候,那么将会将字节写入指定文件末尾处,而不是文件的开始处。
我觉得应该是不能直接通过流删除文件中的某一行或者修改其内容的,java的File类和FileOutputStream类都没有提供修改文件内容的方法。
作者:
不破大地
时间:
2013-6-4 18:37
(1):如果是文本文件,直接用Filewriter的write方法就行,但是有一点点小改动如:
FileWriter fw=new FileWriter("d:\\123.java",true);//传递一个true参数,代表不覆盖已有的文件,并在已有文件的末尾处续写
fw.write("hahahaha");
(2):第二个问题,我没碰到过,但是我相信有方法的,看把行号标出来试试也是有可能实现的。
作者:
胡晓思
时间:
2013-6-4 18:47
建议楼主看下这个类 应该能帮楼主实现想要的功能 楼上说的追加尾部那个功能的实现查看源码最后调用的是native本地方法.
RandomAccessFile
此类的实例支持对随机访问文件的读取和写入
。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为
文件指针
;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。
作者:
Jomes
时间:
2013-6-4 18:52
1、有一个 FileOutputStream(File , true);的构造方法。
如:
fos = new FileOutputStream(File f, true);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
就这样 就可接着往下写。
2、可以的。用bufferedReader readLine 方法可以实现这个功能
作者:
冯超
时间:
2013-6-4 19:15
1.关于不覆盖可以做到
一种笨方法:先读取文件内容,写在BufferWriter中,在写在BufferWriter追加你要写的东西
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringReader;
public class WriterFile {
/**
* @param args
* @throws IOException
* @throws FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException, IOException {
// TODO Auto-generated method stub
//像D盘里面的abc.txt文件写内容 路径:d://abc.txt
//writer("d://abc.txt", "12334");
test4("aaaabbbbcccc", "d://abc.txt");
}
private static void test4(String str, String filePath) throws FileNotFoundException, IOException {
// 将一段字符串写入文件末尾
BufferedReader br = new BufferedReader(new FileReader(filePath)); // FileReader类可以开发文件
String data = new String();
String s;
s = br.readLine();
while (s != null) {
// System.out.println(1);
data = data + s + "\r\n";
s = br.readLine();
}
br.close();
//写,继续写
System.out.println(data);
br = new BufferedReader(new StringReader(data));
PrintWriter fw = new PrintWriter(new File(filePath));
// String strs = null;
while((s = br.readLine()) != null) {
fw.print(s);
fw.print("\r\n");
}
//给指定的文件加一行数据
fw.print(str);
br.close();
fw.close();
System.out.println("写入成功!");
}
}
复制代码
2.修改或者删除a.text中某一行, 你要知道是哪一行对吧,假如修改第三行,或者删除第三行。
private static void test5(int i, String filePath, String str) throws FileNotFoundException, IOException {
// 将一段字符串写入文件末尾
BufferedReader br = new BufferedReader(new FileReader(filePath)); // FileReader类可以开发文件
String data = new String();
String s;
int sign = 0; //测试独到第几行
while ((s=br.readLine()) != null) {
sign++;
//这里就是要修改或者删除的代码
if(sign != i) {
data = data + s + "\r\n";
}
else {
if(str != null)
data = data + str + "\r\n";
}
}
br.close();
System.out.println(data);
//写,继续写
System.out.println(data);
br = new BufferedReader(new StringReader(data));
PrintWriter fw = new PrintWriter(new File(filePath));
while((s = br.readLine()) != null) {
fw.print(s);
fw.print("\r\n");
}
br.close();
fw.close();
System.out.println("修改或者删除成功!");
复制代码
思路差不多,删除则传递为null
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2