目录
1、FileInputStream类和FileOutputStream类
2、DataInputStream类和DataOutputStream类
3、ObjectInputStream类和ObjectOutputStream类
1、BufferedReader类和BufferedWriter类
Java中的IO流主要可分为字节流与字符流还有非流式。
一、字节流
1、FileInputStream类和FileOutputStream类
//创建File类对象
File file = new File("E:/Test/temp1.java");
//创建FileInputStream类对象
FileInputStream fis = new FileInputStream(file);
//读取数据
int num;
while((num=fis.read())!=-1){
System.out.print((char)num);
}
System.out.println("数据读取完毕");
//数据读取完毕之后,关闭流
fis.close();
//创建File类对象
File file= new File("E:/Test/temp1.java");
//创建FileOutputStream类对象
FileOutputStream fos = null;
try {
//使用这两个构造方法创建输出流对象的时候,将第二个参数赋值为true,则在对外进行输出
数据的时候,不会覆盖文件中原来的数据
fos = new FileOutputStream(file,true);
//调用写的方法,将数据写入到文件中
fos.write(65);
System.out.println("数据写入完毕");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
//关闭流
try {
if(fos!=null){
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
2、DataInputStream类和DataOutputStream类
DataInputStream dis = null;
DataOutputStream dos = null;
try {
// 读取二进制文件
dis = new DataInputStream(new FileInputStream("E:/Test/图片1.jpg"));
// 写入二进制文件
dos = new DataOutputStream(new FileOutputStream("E:/Test/图片2.jpg"));
// 一边读取数据,一边将数据写入
int num;
while((num = dis.read())!= -1){
dos.write(num);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
dos.close();
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
3、ObjectInputStream类和ObjectOutputStream类
ObjectInputStream类为序列化对象
ObjectOutputStream类为反序列化对象
注意:如果向文件中使用序列化机制写入多个对象,那么反序列化恢复对象时,必须按照写入的顺序读取。
// 首先创建已经实现Serializable接口的对象
Student stu = new Student("张三",22,99.5);
ObjectOutputStream oos=new ObjectOutputStream(newFileOutputStream("E:/Test/student.txt"));
// 将对象写入文件(序列化对象)
oos.writeObject(stu);
ObjectInputStream ois = new ObjectInputStream(newFileInputStream("E:\\Test\\student.txt"));
// 读取对象(反序列化对象)
Object obj = ois.readObject();
Student stu = (Student)obj;
System.out.println(stu);
二、字符流
1、BufferedReader类和BufferedWriter类
提高字符流读写的效率,进行字符批量的读写,提高了单个字符读写的效率。BufferedReader用于加快读取字符的速度,BufferedWriter用于加快写入的速度。
//创建Writer类对象
Writer writer = null;
//创建BufferedWriter类对象
BufferedWriter bw =null;
try {
writer = new FileWriter("E:/Test/temp.java", true);
bw = new BufferedWriter(writer);
//先向文件中插入一个换行
bw.newLine();
bw.write("hello html");
bw.newLine();
bw.write("hello css");
System.out.println("数据写入完毕");
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
bw.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//创建InputStream类对象,但是InputStream类是一个抽象类,不能创建对象,可以将其引用指向子类
InputStream is = null;
//创建Reader类对象
Reader reader =null;
//创建BufferedReader类对象
BufferedReader br =null;
try {
is = new FileInputStream("E:/Test/temp.java");
// 将字节流转换为字符流
reader = new InputStreamReader(is);
br = new BufferedReader(reader);
//读取文件
String str;
while((str=br.readLine())!=null){
System.out.println(str);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
br.close();
reader.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
2、FileReader类和FileWriter类
//创建FileWriter类对象
FileWriter fw = null;
try {
fw = new FileWriter("E:/temp.java", true);
fw.write("hello java");
System.out.println("文件写入完毕");
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//创建FileReader类对象,FileReader类对象只能按照本地平台的编码格式读取文件,
// 如果文件编码和本地平台编码格式不一样,会出先乱码的现象
FileReader fr =null;
try {
fr =new FileReader("E:/temp.java");
char[] chs = new char[1024];
//读取数据
int num =fr.read(chs);
for (int i = 0; i < num; i++) {
System.out.print(chs[i]);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
三、File类
// 创建一个File对象
File f1 = new File("E:\\File");
// 判断是否存在
System.out.println(f1.exists());
// 如果不存在,以文件的形式创建
if(!f1.exists()){
f1.createNewFile();
}
// 如果不存在创建一重目录
if(!f1.exists()){
f1.mkdir();
}
// 创建多重目录
File f2 = new File("E:\\a\\b\\c");
f2.mkdirs();
File f3 = new File("E:\\java学习笔记\\0719选择结构.txt");
// 获取父路径
System.out.println(f3.getParent());
System.out.println("绝对路径:"+f3.getAbsolutePath());
// 获取文件名
System.out.println("文件名:"+f1.getName());
// 判断是否是一个目录
System.out.println(f1.isDirectory());
// 判断是否是一个文件
System.out.println(f1.isFile());
// 获取文件大小
System.out.println(f1.length());
// 获取当前目录下的所有子文件
File f2 = new File("E:\\java学习笔记");
File files[] = f2.listFiles();
for(File file : files){
System.out.println(file.getName());
}