Java 的IO流的四大基类
IO流的分类
- 按照处理数据类型角度,可分为字节流和字符流。
- 按照数据流向,分为输入流和输出流。(输入和输出是相对于程序来说的)
- 按照流的功能,可分为节点流和处理六流(没有节点流,处理流发挥不了作用),流的前面是File或者ByteArray开头的均是节点流,其他的是处理流。处理流就是为了提升性能的。
四大抽象的基类
IO流操作的四大步骤
- 创建流
- 选择流‘
- 操作
- 释放资源
- 关于InputStream和OutputStream常用方法的使用
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class practice2 {
public static void main(String[] args) {
String path1="E:\\java\\workplace\\test\\测试\\io1.txt";
String path2="E:\\java\\workplace\\test\\测试\\io2.txt";
Input(path1);
output(path2);
copy(path1,path2);
}
//文件输入流
public static void Input(String path) {
try {
FileInputStream in=new FileInputStream(path);
int len;
while((len=in.read())!=-1 ) {
System.out.print((char)len);
}
in.close();//每次使用完之后,都必须关掉连接
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 文件字节输入流
* */
public static void textfileinputstream() {
try {
FileInputStream in=new FileInputStream("E:\\java\\workplace\\test\\src\\day12\\tt.txt");
byte [] b=new byte[10];//缓冲容器,每次读取10个字节
int len=0;//接收长度
//in.read(b);//in.read()读取每行的长度,当in.read()返回值为-1,则文件夹读完了
while((len=in.read(b))!=-1) {
//字节数组--->字符串(解码)
String str=new String(b,0,len);
System.out.println(str);
//new String(b,0,len)参数一是缓冲数据的数组,参数2是从数据的哪个位置开始转换字符串,参数3是总共需要转换字符串的长度
}
in.close();//注意。。。。流在使用完毕之后,一段要关闭
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 文件字节输出流
*
* */
public static void testFileoutputStream() {
try {
FileOutputStream out=new FileOutputStream("E:\\java\\workplace\\test\\src\\day12\\tt2\\tt1.txt");
String string="你好吗";
//字符串-->字节数组(编码)
byte[] br=string.getBytes();
out.write(br);//将数据写到内存
out.flush();//把内存数据刷写到磁盘
out.close();//每次使用后,都需要关闭
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 复制一个文件内容到另外一份路径去,可以是文档,图片等其他类型的文件
* */
public static void copyFlie(String inpath,String outpath) {
try {
FileInputStream in=new FileInputStream(inpath);
FileOutputStream out=new FileOutputStream(outpath);
byte [] b=new byte[100];//设置数据接收读取文件的内容
int len=0;
while((len=in.read(b))!=-1) {
out.write(b, 0, len);
}
out.flush();//把内存数据刷写到磁盘
out.close();//每次使用后,都需要关闭
in.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
对于Read和Write类的常用方法
import java.io.*;
public class fileChar {
public static void main(String []args) {
String inpath="E:\\java\\workplace\\test\\src\\day12\\char1.txt";
testFilein(inpath);
String outpath="E:\\java\\workplace\\test\\src\\day12\\char2.txt";
testfileout("你好",outpath);
testfileout("不好",outpath);
String outpath2="E:\\java\\workplace\\test\\src\\day12\\tt2\\char1.txt";
copyfile(inpath, outpath2);
}
/*
* 文件字符输入流FileReader
* */
public static void testFilein(String inpath) {
try {
FileReader r=new FileReader(inpath);
char[] ch=new char[100];
int len=0;
while((len=r.read(ch))!=-1) {
System.out.println(new String(ch,0,len));
}
r.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 文件字符输出流FileWriter
* */
public static void testfileout(String str,String outpath) {
try {
FileWriter w=new FileWriter(outpath);
w.write(str);
w.flush();
w.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 文件字符流复制
* */
public static void copyfile(String inpath,String outpath) {
try {
FileReader r=new FileReader(inpath);
FileWriter w=new FileWriter(outpath);
char [] ch=new char[255];//创建临时存放数据的数组
int len=0;//读取数据的长度
//r.read返回值是读取数据的长度
while((len=r.read(ch))!=-1) {
w.write(ch, 0, len);
}
r.close();
w.flush();
w.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}