bit---比特,Byte----表示字节.
字节 (byte):8个二进制位(bit)为一个字节(B),最常用的单位。
8bit(位/比特) =1 Byte(字节)
1024 字节= 1KB
1024KB = 1MB
一般 utf-8 编码下,一个汉字 字符 占用 3 个 字节.
Java中的一个char是2个字节。Java采用unicode,2个字节来表示一个字符,这点与C语言中不同。
1、Java IO的类型
Java IO可以分为:
1)输入流:InputStream和Reader
2)输出流:OutputStream和Writer
而从其处理流的类型的维度上看,Java IO又可以分为:
1)字节流:InputStream和OutputStream
2)字符流:Reader和Writer
字节流 | 对应子类 | 字符流 | 对应子类 | |
输入流 | InputStream (字节输入-- 抽象类-- 元祖) |
| Reader (字符输入---抽象类-- 元祖) |
|
输出流 | OutputStream (字节输出-- 抽象类-- 元祖) |
| Writer (字符输入---抽象类-- 元祖) |
|
FlileinputStream --- 文件 字节输入流 read() 方法 如果返回 -1 表示读取完毕
/*
FileInputStream构造方法有三种
1可以传递字符串地址,
2也可以是File类型对象
3参数 FileDescriptor
*/
FileInputStream fileinputStream = new FileInputStream("e:/hello.txt");
byte[] buff = new byte[1024];//缓冲区
int max;//接受返回值,read(byte )方法返回 缓冲区中 最大字节数字
while ((max = fileinputStream.read(buff)) > 0)
{
//String 转换byte类型
System.out.println(new String(buff,0,max));
}
fileinputStream.close();//最后关闭
}
FileOutputStream --- 文件 字节输出流
/*
//实例化一个文件的字节输出流,输出写数据时,指定的文件不存在,会自动创建后,再写入
注意此方法会覆盖原有的数据,如果想追加数据,需要在FileOutputStream(String name , true)第二个参数加上true
*/
FileOutputStream fout = new FileOutputStream("E:/hello.txt",true);
String name = "要写入的数据。。。";
byte[] bt = name.getBytes();//getBytes 将字符串转换成bytes数组
fout.write(bt);
fout.close();
FlileinputStream --- 文件 字节输入流 + FileOutputStream --- 文件 字节输出流
复制文件(包括图片,视频,音频等。。。二进制文件)
//字节输入流
FileInputStream ins = new FileInputStream("e:/图片1.jpg");
//字节输出流
FileOutputStream ops = new FileOutputStream("e:/图片2.jpg");
byte[] buff = new byte[8];
int max;
while ((max = ins.read(buff)) != -1)
{
ops.write(buff,0,max);
}
System.out.println("复制完毕...");
ins.close();
ops.close();
FileReader 文件 字符输入流 read() 方法 如果返回 -1 表示读取完毕
FileReader fileReader = new FileReader("e:/hello.txt");
char[] buff = new char[8];
int read;
while ((read = fileReader.read(buff)) != -1)
{
System.out.println(new String(buff,0,read));
}
fileReader.close();
FileWriter 文件 字符输出流 (在这里省略了)
字符 输入输出联动(文件复制拷贝粘贴)
FileReader fileReader = new FileReader("e:/hello.txt");
FileWriter fileWriter = new FileWriter("e:/hello2.txt",true);
char[] cuff = new char[8];
int ok;
while ((ok = fileReader.read(cuff)) != -1)
{
fileWriter.write(cuff,0,ok);
}
fileWriter.close();
fileWriter.close();
BufferedReader 处理流(字符输入流)
read() 方法如果返回 -1 表示 读取完毕
readLine() 方法 如果返回 null 表示读取完毕
BufferedReader bufferedReader = new BufferedReader(new FileReader("e:/hello.txt"));
String name;
while (( name = bufferedReader.readLine()) != null)
{
System.out.println(name);
}
BufferedWriter 处理流 (字符输出流)
BufferedWriter buw = new BufferedWriter(new FileWriter("e:/hello.txt"));
buw.write("写入的内容。。。");
buw.newLine();// 系统换行
buw.write("写入的内容。。。");
buw.close();
BufferedReader 处理流(字符输出流) + BufferedWriter 处理流 (字符输入流)
复制文件 (字符流只能复制纯文本,不能复制二进制文件)
BufferedReader bufR = new BufferedReader(new FileReader("e:/hello.txt"));
BufferedWriter buW = new BufferedWriter(new FileWriter("e:/hello3.txt"));
char[] buf = new char[8];
int max;
while ((max = bufR.read(buf)) != -1)
{
buW.write(buf,0,max);
}
buf.clone();
buW.close();
System.out.println("复制拷贝完毕。。。");
转换流 InputStreamReader(字符输入流)
字节 输入流 FileInputStream 转换成
字符 输入流 BufferedReader
-----将字节流转换成字符流,可设置编码
//使用转换流InputStreamReader
// 将字节流 FileInputStream 转换成字符流BufferedReader
//设置字符编码 比如 gbk,utf-8,
InputStreamReader insr = new InputStreamReader(new FileInputStream("e:/hello.txt"),"utf-8");
BufferedReader bfr = new BufferedReader(insr);
char[] buff = new char[1024];
int max;
while ((max = bfr.read(buff)) != -1)
{
System.out.println(new String(buff,0,max));
}
System.out.println("utf-8 编码 正常");
bfr.close();
转换流 OutputStreamWriter(字符输出流)
字节 输出流 FileOutputStream 转换成
字符 输出流 OutputStreamWriter
//使用OutputStreamWriter
//将FileOutputStream 字节流 转换成 字符流 OutputStreamWriter
OutputStreamWriter ops = new OutputStreamWriter(new FileOutputStream("e:/hello5.txt"),"utf-8");
ops.write("hello 中文 ");
ops.close();