IO流
IO流
IO的操作步骤
FileInputStream 字节输入流
File file=new File("a.txt"); 文件
//使用流和具体的文件关联
InputStream is= new FileInputStream(file);
int c;
//将读取到的内容临时存入c,判断是否读到文件末尾,-1
while((c=is.read())!=-1){
System.out.println(c);
}
//关闭流
is.close();
File file=new File("b.txt");
//流
InputStream is=new FileInputStream(file);
//定义一个存储数据的临时空间
byte[] bs=new byte[1024];
//将读取的内容存入临时空间,返回读取到的字节数
int len;
while((len=is.read(bs))!=-1){
System.out.println(new String(bs,0,len,"UTF-8"));
}
is.close();Reader字符输入流
File file=new File("b.txt");
Reader r=null;
r=new FileReader(file);
char[] c=new char[3];
//接收读取到的字符个数
int len;
while((len=r.read(c))!=-1){
System.out.println(new String(c,0,len));
}
r.close();OutputStream 字节输出流
//1、文件
File file=new File("a.txt");
//2、流
FileOutputStream os=new FileOutputStream(file);
byte[] bs=newbyte[]{97,98,99};
bs="你我他".getBytes("GBK");//GBK编码
//写出
for(int i=0;i<2;i++){
os.write(bs);
os.flush();//输出流要刷新缓存
}
//刷新
os.close();Writer字符输出流
File file=new File("e1.txt");
Writer w=new FileWriter(file,true);
//(file代表要输出的文件,append表示是否在原文件的后面追加)
String str=new String("你".getBytes("GBK"));
System.out.println(str);
w.write(str);
w.flush();
w.close();文件的复制 字符流边读边写
File src=new File("test.png");
//目的地
File dest=new File("testcopy.png");
Reader r=new FileReader(src);
Writer w=new FileWriter(dest);
char[]car=newchar[1024];
int len;
//循环读取
while((len=r.read(car))!=-1){
w.write(car,0,len);
}
w.flush();
w.close();//先开启的流后关闭
r.close();字符流 边写边读
File src=new File("test.png");
//目的地
File dest=new File("testcopy.png");
InputStream is=new FileInputStream(src);
OutputStream os=new FileOutputStream(dest);
byte[]car=newbyte[2];
int len;
while((len=is.read(car))!=-1){
os.write(car,0,len);
}
os.flush();
os.close();
is.close();缓冲流 BufferInputStream 以及 BufferOutputStream
提高性能读取文件 +新增的方法(不能使用多态)
InputStream is=new FileInputStream("a.txt");
//处理流套在结点流之上
BufferedInputStream bis=new BufferedInputStream(is);
byte [] bytes=new byte[1024];
int len;
while((len=bis.read(bytes))!=-1){
System.out.println(newString(bytes,0,len,"utf-8"));
}
//内部会帮我们关闭其他流
bis.close();
BufferedReader br=new BufferedReader(new FileReader("a.txt"));
String data;
while(null!=(data=br.readLine())){
System.out.println(data);
}
br.close();
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("f.txt"));
bos.write("核力量".getBytes());
bos.flush();
bos.close();
File file=new File("g.txt");
Writer w=new FileWriter(file);
//流准备好了
BufferedWriter bw=new BufferedWriter(w);
//写数据
bw.write("hellWorld你好世界");
bw.newLine();
bw.write("世界你好");
//刷新
bw.flush();
//释放资源
bw.close();转换处理流
InputStreamReader
字节流输入 字符流输出
//解决乱码而且方便
//通过字节流读取文件内容,由转换流内部帮我们将字节转为字符,而且我们设置了编码
InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"),"GBK");
BufferedReader bufferedReader=new BufferedReader(isr);
String str1;
while((str1=bufferedReader.readLine())!=null){
System.out.println(str1);
}
bufferedReader.close();数据处理流
DataInputStream DataOutputStream
其他文件是以String类型的数据 但数据处理流可以用来处理 其他类型的数据 例如int ,double等基本类型的数据
OutputStream os=new FileOutputStream("a.txt");
DataOutputStream dos=new DataOutputStream(os);
dos.writeInt(1111);
dos.flush();
dos.close();
DataInputStreamd is=new DataInputStream(new FileInputStream("a.txt"));
int i=dis.readInt();
System.out.println(i);
dis.close(); 对象流
使用对象流时,类一定要序列化。如果希望某些属性不被序列化,可在属性里加入关键字 transient
//序列化
OutputStream os=new FileOutputStream("a.txt");
//处理流对象流
ObjectOutputStream oos=new ObjectOutputStream(os);
//写出对象
oos.writeObject(newPerson("zs",18,true));
oos.flush();
oos.close();
//反序列化
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("a.txt"));
Person p=(Person)ois.readObject();
System.out.println(p);
ois.close();ByteArrayInputStream与ByteArrayOutputStream
byte[] bytes="abcdefghijklmnopqrstuvwxyz".getBytes();
StringBuilder sb=new StringBuilder();
//字节数组输入流
ByteArrayInputStream bais=new ByteArrayInputStream(bytes);
int temp;
while((temp=bais.read())!=-1){
sb.append((char)temp);
}
System.out.println(sb);
查看6道真题和解析
海康威视公司福利 1125人发布