19、FileWriter打开清空文件,RandomAccessFile的write方法
来源:互联网 发布:网络社会的崛起 编辑:程序博客网 时间:2024/05/17 02:16
学IO中,写了一个往txt的目标字符串后面插入一个字符串的小练习如下:
import java.io.*;public class InsertContent {public static void main(String[] args) {//在目标字符串之后插入String target = "DSAAC28";File file = new File("text.txt");//定位目标字符串的起始位置int postotal = 0;//定位目标字符串在当前StringBuffer中的位置int postemp = -1;try(try(FileReader fR = new FileReader(file)<span style="white-space:pre"></span> //;FileWriter fW = new FileWriter(file)))//***********************************************************{char[] buff = new char[32];StringBuffer strbuff = new StringBuffer();int hasRead = 0;do {strbuff.delete(0, strbuff.length());if((hasRead = fR.read(buff)) > 0)strbuff.append(buff, 0, hasRead);postotal += hasRead;} while ((postemp = strbuff.indexOf(target)) < 0 && hasRead != -1);postotal = postotal - hasRead + postemp;}catch (Exception e) {// TODO: handle exceptione.printStackTrace();}if(postemp < 0){System.out.println("未找到目标字符串");return;}try(FileReader fR = new FileReader(file);RandomAccessFile raf = new RandomAccessFile(file, "rw")){fR.skip(postotal + target.length());StringBuffer strbuff = new StringBuffer();char[] buff = new char[32];int hasRead = 0;while((hasRead = fR.read(buff)) > 0){strbuff.append(buff, 0, hasRead);}raf.seek(postotal + target.length());String str = "\nfuck\n" + strbuff;raf.write(str.getBytes());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}在练习过程中,发现了一些值得注意的地方,
第一、
在长串星号的地方,本来打开了一个FileReader和一个FileWriter,但是这样每次都不能找到目标字符串。打开text.txt一看,空的。于是发现,如果用
FileWriter fW = new FileWriter(file)构造FileWriter的时候默认是从文件开头开始写入,于是会清空文件的所有内容。查看文档发现,如果使用
public FileWriter(File file, boolean append) throws IOException
这个构造器,append参数为true,即是从末尾写入,则不会清空已有内容。
第二、
RandomAccessFile的默认write方法是按字节写的,只能接收byte数组为参数,只有writeChars()、和writeUTF()方法可以以String为参数,前者写出来的东西英文字符变成了全角,汉字成了乱码。用write(str.getBytes())先转换成byte再写入才能正常。还有一个方法:raf.writeBytes(str)它会把一个byte能表示正常写入,比如英文,而汉字则会出错。
0 0
- 19、FileWriter打开清空文件,RandomAccessFile的write方法
- 清空文件的方法
- 清空文件的方法
- linux下清空文件的方法
- Linux中清空文件的方法
- bash shell 清空文件的方法
- input file清空文件域内值的方法!
- linux几种快速清空文件内容的方法
- linux几种快速清空文件内容的方法
- linux几种快速清空文件内容的方法
- Linux下几种快速清空文件内容的方法
- linux几种快速清空文件内容的方法
- linux几种快速清空文件内容的方法
- linux下清空文件内容的三种方法
- linux几种快速清空文件内容的方法
- linux下几种快速清空文件内容的方法
- Linux下清空文件内容的几种方法
- linux几种快速清空文件内容的方法
- 1
- C++里有趣的(++i)和(i++)
- Apache James 实战之“安装配置”james-3.x
- C语言 编写程序实现字符串拷贝,不允许调用strcpy函数。
- 数组-05. 字符串字母大小写转换(10)
- 19、FileWriter打开清空文件,RandomAccessFile的write方法
- LeetCode2 Add Two Numbers
- 第4周项目3对象数组操作长方柱类
- 题目1 : Magic Box【微软2016校园招聘在线笔试】
- 求两个数的最大公约数和最小公倍数
- 大明宫
- ionic-CLI-图标和启动动画自动生成ionic resources
- bbs的开发历程
- ZOJ 3317 Murder in Restaurant(数学啊 )