IO流
IO流
字符流
-
InputStreamReader
-
OutputStreamWriter
-
汉字存储
- GBK编码
- 2个字节
- UTF-8
- 3个字节
- GBK编码
String s = "中国";
byte[] bys = s.getBytes();
byte[] bys = s.getBytes("GBK");
- 字符流
- 字节流+编码表
编码表
- 二进制
- 所有信息都是二进制存储
- 编码
- 按某种规则将字符转换为二进制存储
- 解码
- 按某种规则将二进制转换为字符解析
- 编码表
- 字符集
- 一个系统所有字符的集合
- ASCII/GBXX/Unicode
- 字符集
编码解码
-
编码
- getBytes()
- getBytes(String charsetName)
-
解码
- String(byte[] bytes)
- String(byte[] bytes,String charsetName)
String s = "中国";
byte[] bys1 = s.getBytes();
System.out.println(Arrays.toString(bys1));//[-28,-72,-83,-27,-101,-67]
byte[] bys2 = s.getBytes("UTF-8");
System.out.println(Arrays.toString(bys2));//[-28,-72,-83,-27,-101,-67]
byte[] bys2 = s.getBytes("GBK");
System.out.println(Arrays.toString(bys2));//[-42,-48,-71,-6]
String s = "中国";
byte[] bys1 = s.getBytes("UTF-8");
String ss = new String(bys1,"UTF-8");
System.out.println(ss);
字符流中的编码解码
- FileOutStream
- FileInputStream
public class ConversionStramDemo{
public static void main(String[] args){
//采用默认编码
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("fos.txt"));
osw.write("中国");
osw.close();
}
}
public class ConversionStramDemo{
public static void main(String[] args){
//采用指定编码
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("fos.txt"),"UTF-8");
osw.write("中国");
osw.close();
}
}
public class ConversionStramDemo{
public static void main(String[] args){
//采用默认编码
InputStreamReader isr = new InputStreamReader(new FileInputStream("isr.txt"));
//一次读一个字符
int ch;
while((ch=isr.read())!=-1){
System.out.println((char)ch);
}
isr.close();
}
}
public class ConversionStramDemo{
public static void main(String[] args){
//采用默认编码
InputStreamReader isr = new InputStreamReader(new FileInputStream("isr.txt"),"UTF-8");
//一次读一个字符
int ch;
while((ch=isr.read())!=-1){
System.out.println((char)ch);
}
isr.close();
}
}
字符流写数据
- OutputStreamWriter
- write(int c)
- write(char[] cbuf)
- write(char[] cbuf,int off,int len)
- write(String str)
- write(String str,int off,int len)
写入一个字符
OutputStreamWrite osw = new OutputStreamWriter(new FileOutputStream("osw.txt"));
osw.write(97);//a
//有缓冲,需要刷新
osw.flush();
//关闭前也会先刷新
osw.close();
写入一个字符数组
OutputStreamWrite osw = new OutputStreamWriter(new FileOutputStream("osw.txt"));
char[] ch = {'a','b','c','d'};
osw.write(ch);
//关闭前也会先刷新
osw.close();
写入一个字符串
OutputStreamWrite osw = new OutputStreamWriter(new FileOutputStream("osw.txt"));
String s = "abcde";
osw.write(s);
//关闭前也会先刷新
osw.close();
字符流读数据
- InputStreamReader
- read()
- read(char[] cbuf)
一次读一个字符
InputStreamReaderisr = new InputStreamReader(new FileInputStream("isr.txt"));
int ch;
while((ch=isr.read())!=-1){
System.out.println((char)ch);
}
isr.close();
一次读一个字符数组
InputStreamReaderisr = new InputStreamReader(new FileInputStream("isr.txt"));
char[] chs = new char[1024];
int len;
while((len=isr.read(chs))!=-1){
System.out.println(new String(chs,0,len));
}
isr.close();
复制java文件
- 一次读一个字符
InputStreamReader isr = new InputStreamReader(new FileInputStream("xxx.java"));
OutputStreamWrite osw = new OutputStreamWriter(new FileOutputStream("xxx2.java"));
//一次读一个字符
int ch;
while((ch=isr.read())!=-1){
osw.write(ch);
}
osw.close();
isr.close();
- 一次读一个字符数组
InputStreamReader isr = new InputStreamReader(new FileInputStream("xxx.java"));
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("xxx2.java"));
//一次读一个字符数组
char[] chs = new char[1024];
int len;
while((len=isr.read(chs))!=-1){
osw.write(chs,0,len);
}
osw.close();
isr.close();
- 改进
- FileReader
- FileWriter
FileReader fr = new FileReader("xxx.java");
FileWriter fw = new FileWriter("xxx2.java");
int ch;
while((ch=fr.read())!=-1){
fw.write(ch);
}
fw.close();
fr.close();
FileReader fr = new FileReader("xxx.java");
FileWriter fw = new FileWriter("xxx2.java");
char[] chs = new char[1024];
int len;
while((len=fr.read(chs))!=-1){
fw.write(ch);
}
fw.close();
fr.close();
字符缓冲流
- BufferedReader
- BufferedWriter
字符缓冲输出流
- BufferedWriter
BufferedWriter bw = new BufferedWriter(new FileWirter("bw.txt"));
bw.write("hello");
bw.close();
字符缓冲输入流
-
BufferedWriter
-
一次读一个字符
BufferedReader br = new BufferedReader(new FileReader("bw.txt"));
int ch;
while((ch=br.read())!=-1){
System.oyut.println((char)ch);
}
br.close();
- 一次读一个字符数组
BufferedReader br = new BufferedReader(new FileReader("bw.txt"));
//一次读一个字符数组
char[] chs = new char[1024];
int len;
while((len=br.read(chs))!=-1){
System.oyut.println(new String(chs,0,len));
}
br.close();
字符缓冲流复制java文件
//一次读写一个字符数据
public class CopyJavaDemo{
public static void main(String[] args){
BufferedReader br = new BufferedReader(new FileReader("br.java"));
BufferedWriter bw = new BufferedWriter(new FileWirter("bw.java"));
//一次读写一个字符数据
int ch;
while((ch=br.read())!=-1){
bw.write(ch);
}
bw.close();
br.close();
}
}
//一次读写一个字符数组
public class CopyJavaDemo{
public static void main(String[] args){
BufferedReader br = new BufferedReader(new FileReader("br.java"));
BufferedWriter bw = new BufferedWriter(new FileWirter("bw.java"));
//一次读写一个字符数组
char[] chs = new char[1024];
int len;
while((len=br.read(chs))!=-1){
bw.write(ch,0,len);
}
bw.close();
br.close();
}
}
特有功能
- BufferedWriter
- newLine()
- BufferedReader
- readLine()
BufferedWriter bw = new BufferedWriter(new FileWirter("bw.txt"));
bw.wirte("xxxxx");
bw.newLine();
bw.wirte("xxxxx");
bw.close();
BufferedReader br = new BufferedReader(new FileReader("br.txt"));
//读取内容不包含换行
String line = br.readLine();
System.out.println(line);
br.close();
改进java文件的读取
public class CopyJavaDemo{
public static void main(String[] args){
BufferedReader br = new BufferedReader(new FileReader("br.java"));
String line;
while((line=br.readLine())!=null){
System.out.println(line);
}
bw.close();
br.close();
}
}
改进java文件的复制
public class CopyJavaDemo{
public static void main(String[] args){
BufferedReader br = new BufferedReader(new FileReader("br.java"));
BufferedWriter bw = new BufferedWriter(new FileWirter("bw.java"));
String line;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
}
bw.close();
br.close();
}
}