File类:
一个file类的对象可以表示一个具体的文件或目录。
file类的对象表示硬盘上的文件,判断、获取文件信息,创建、删除;
输入和输出:
java中把用于文件输入和输出的类称为流;
有些类用于输入数据的,有些用于输出数据的。
有些以字节为单位读取数据,有些以字符为单位读取数据。
字节流:以字节为单位读取数据,可以读取任意的文件,mp3。
字节输入/输出流:
输入:Inputstream
输出:OutputStream
文件字节输入流:
file+inputstream
文件字节输出流:
file+OutputStream
节点流与处理流:
根据封装类型不同
节点流:直接封装的是文件,数据。
处理(包装)流:分装的是其他流对象,称为处理流。提供了缓冲功能。
处理流:
buffer/Data+In/Out;
buffer缓冲。
使用buffer后需要flush刷新缓冲区。
Data数据输入输出流。
import java.io.*;
public class Dome5 {
public static void main(String[] args) throws IOException {
FileInputStream inputStream=new FileInputStream("D:/dome2.txt");
BufferedInputStream inputStream1=new BufferedInputStream(inputStream,20);
FileOutputStream outputStream=new FileOutputStream("E:/dome2.txt");
BufferedOutputStream outputStream1=new BufferedOutputStream(outputStream,20);
byte[] bytes=new byte[10];
int flag=0;
while ((flag=inputStream1.read(bytes))!=-1){
outputStream1.write(bytes,0,flag);
}
inputStream1.close();
outputStream1.close();
}
}
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
public class Dome6 {
public static void main(String[] args) throws IOException {
Scanner Scan=new Scanner(System.in);
FileOutputStream outputStream=new FileOutputStream("E:/masse.txt");
String s=Scan.next();
//outputStream.write(s.getBytes());wtite输入格式为位数组,需要将输入的字符串转化为byte【】类型。
DataOutputStream dataOutputStream=new DataOutputStream(outputStream);
dataOutputStream.writeUTF(s);
dataOutputStream.flush();
dataOutputStream.close();
}
}
字符输入/输出流:
字符流:以字符为单位读取数据。只能读取文本文件;会将读到的字节根据编码表转化为一个字符编码
处理字符和字符串,处理单位为1个字符,
输入:Reader:
输出:Writer:
常用类:
File+Reader/Reader继承InputStreamReader和OutputStreamReader;1.InputStreamReader/2.OutputStreamReade都是转换流,1将字节转换为字符,2将字符转化为字节。
import java.io.*;
public class Dome1 {
public static void main(String[] args) throws IOException {
FileReader f=new FileReader("D:/dome.txt");
FileWriter f1=new FileWriter("D:/feifanDome/dome1.txt");
int size=0;
char[] chars=new char[4];
/*
while ((size=f.read())!=-1){
f1.write(size);
}
f.close();
f1.close();
*/
while ((size=f.read(chars))!=-1){
f1.write(chars,0,size);
}
f.close();
f1.close();
}
}
处理流:
buffered+Reade/Writer。
import java.io.*;
public class Dome2 {
public static void main(String[] args) throws IOException {
FileReader f1=new FileReader("D:/dome.txt");
FileWriter f2=new FileWriter("D:/feifanDome/dome2.txt",true);//true 保存上次的数据
BufferedReader bufferedReader=new BufferedReader(f1);
BufferedWriter bufferedWriter=new BufferedWriter(f2);
String c=null;
while ((c=bufferedReader.readLine())!=null){
bufferedWriter.write(c);
bufferedWriter.newLine();
}
bufferedWriter.flush();
bufferedReader.close();
bufferedWriter.close();
}
}
对象输入输出流:
把java中的对象输入到文件中,从文件中把对象输入到程序中。
如果一个类需要被序列化到文件中,那么这个类需要实现Serializable接口,会自动生成序列化编号,但自动生成的编号在类信息改变后,会重新生成一个编号。
这时可以在类中显示生成的一个编号,这样类信息修改后,编号也不改变。
import java.io.Serializable;
public class Student implements Serializable{ //需要被序列化到文件中,就要实现Serializable接口
private static final long serialVersionUID = -3360144134016461703L;//生成序列化编号
private String nume;
private int num;
public Student(String nume, int num) {
this.num = num;
this.nume = nume;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getNume() {
return nume;
}
public void setNume(String nume) {
this.nume = nume;
}
@Override
public String toString() {
return "Student{" +
"num=" + num +
", nume='" + nume + '\'' +
'}';
}
}
对象序列化:
当一个类的对象需要被序列化时需要被生成序列化编号
把java中的对象输入到文件的过程
ObjectOutputStream;
对象反序列化:
从文件中把对象输入到程序的过程;
反序列是会生成一个新对象,所以对象的反序列化也是创建对象的一种方式。
ObjectInputStream;