通过码表读取字符
中文的第一个字节都是负数,可以通过这点进行判断。
FileReader fr = new FileReader("1.txt");
int c;
while((c=fr.read())!=-1) {
System.out.println((char)c);
}
fr.close();
IO字符流进行copy
FileReader fr = new FileReader("1.txt");
FileWriter fw = new FileWriter("2.txt");
int c;
while((c=fr.read())!=-1) {
fw.write(c);
}
fr.close();
fw.close();
//字符流只能copy纯文本。
//因为在读的时候会将字节转换成字符,在转换过程中,可能找不到对应的字符,就会用?代替,写出的时候会将字符转换成字节输出。如果是?,直接写出,这样写出之后的文件就乱了,看不了了。
字符流数组copy文件
FileReader fr = new FileReader("1.txt");
FileWriter fw = new FileWriter("33.txt");
char[] arr=new char[1024];
int len;
while((len=fr.read(arr))!=-1) {
fw.write(arr,0,len);
}
fr.close();
fw.close();
利用缓冲区进行copy,BufferedReader 和BufferedWriter 。
BufferedReader br = new BufferedReader(new FileReader("1.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("66.txt"));
int b;
while((b=br.read())!=-1) {
bw.write(b);
}
br.close();
bw.close();
BufferedReader的**readLine()方法,每次读一行。
BufferedWriter的newLine()**方法,换行。
BufferedReader fr = new BufferedReader(new FileReader("1.txt"));
BufferedWriter fw = new BufferedWriter(new FileWriter("45.txt"));
String line;
while((line=fr.readLine())!=null) {
// newLine()与\r\n的区别:
// newLine()是快平台的方法
// \r\n只支持的是window的系统
fw.write(line);
// fw.write("\r\n");
fw.newLine();
}
fr.close();
fw.close();
实现文件反转:
BufferedReader br = new BufferedReader(new FileReader("1.txt"));
ArrayList<String> list=new ArrayList<String>();
String line;
while((line=br.readLine())!=null) {
list.add(line);
}
br.close();
BufferedWriter bw = new BufferedWriter(new FileWriter("78.txt"));
for(int i=list.size()-1;i>0;i--) {
bw.write(list.get(i));
bw.newLine();
}
bw.close();
LineNumberReader 设置行数,和设置起始行数。
LineNumberReader lnr = new LineNumberReader(new FileReader("1.txt"));
String line;
lnr.setLineNumber(100);
while((line=lnr.readLine())!=null) {
System.out.println(lnr.getLineNumber());
}
lnr.close();
装饰设计模式的简单演示:
//装饰设计模式的好处:
//耦合性不强,被装饰类的变化与装饰类的变化无关。
dashen da = new dashen(new Student());
da.code();
interface Coder{
public void code();
}
class Student implements Coder{
@Override
public void code() {
// TODO Auto-generated method stub
System.out.println("123");
System.out.println("456");
}
}
class dashen implements Coder{
private Student s;
public dashen(Student s) {
this.s=s;
}
@Override
public void code() {
// TODO Auto-generated method stub
s.code();
System.out.println("789");
System.out.println("000");
}
}
使用指定的编码表进行读写
InputStreamReader isr= new InputStreamReader(new FileInputStream("utf_8.txt"),"utf-8");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("gbk.txt"),"UTF-16");
int c;
while((c=isr.read())!=-1) {
osw.write(c);
}
isr.close();
osw.close();
进阶版
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("utf_8.txt"),"utf-8"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("gbk.txt"),"gbk"));
int c;
while((c=br.read())!=-1) {
bw.write(c);
}
br.close();
bw.close();
获取文本上字符出现的个数
BufferedReader br=new BufferedReader(new FileReader("1.txt"));
TreeMap<Character, Integer> tm = new TreeMap<>();
int c;
while((c=br.read())!=-1) {
char ch=(char)c;
/*
* if(!tm.containsKey(ch)) { tm.put(ch, 1); }else { tm.put(ch, tm.get(ch)+1); }
*/
tm.put(ch, !tm.containsKey(ch)?1:tm.get(ch)+1);
}
br.close();
BufferedWriter bw = new BufferedWriter(new FileWriter("2.txt"));
for (Character key : tm.keySet()) {
switch (key) {
case '\t':
bw.write("\\t"+":"+tm.get(key));
break;
case '\n':
bw.write("\\n"+":"+tm.get(key));
break;
case '\r':
bw.write("\\r"+":"+tm.get(key));
break;
default:
bw.write(key+":"+tm.get(key));
break;
}
bw.newLine();
}
bw.close();
试用版软件的案例
BufferedReader br = new BufferedReader(new FileReader("config.txt"));
String line = br.readLine();
int times=Integer.parseInt(line);
if(times>0) {
System.out.println(times--);
}else {
System.out.println("000");
}
FileWriter fw = new FileWriter("config.txt");
fw.write(times+"");
br.close();
fw.close();