Java IO流
一、File类
一个File的对象,可以表示计算机硬盘上的一个文件或目录(文件夹)可以获取文件信息,创建文件,删除文件但是不能对文件中的数据进行读写操作
//通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File fi = new File(“C:\Users\qq\Desktop\demo.txt”);
System.out.println(fi.canExecute());
System.out.println(fi.canRead());
System.out.println(fi.canWrite());
System.out.println(fi.exists());//文件是否存在
System.out.println("-----------------------------------------");
System.out.println(fi.getAbsoluteFile() );//返回此抽象路径名的绝对形式。
System.out.println(fi.getAbsolutePath() );//返回此抽象路径名的绝对路径名字符串
System.out.println(fi.getParentFile() );//返回此抽象路径名的父,或抽象路径名 null如果此路径名没有指定父目录
System.out.println(fi.getName());//返回由此抽象路径名表示的文件或目录的名称
System.out.println(fi.getParent());//返回此抽象路径名的父 null的路径名字符串,如果此路径名未命名为父目录,则返回null
System.out.println("------------------------------------------");
System.out.println(fi.isAbsolute());//路径名是否是绝对的
System.out.println(fi.isDirectory());//是否为目录/文件夹
System.out.println(fi.isFile());//是否为普通文件
System.out.println(fi.isHidden());//是否为隐藏文件
System.out.println("--------------------------------------------");
System.out.println(new Date(fi.lastModified()));//最后修改时间
System.out.println(fi.length());//文件内容长度
fi.mkdir();//创建单级文件夹
fi.mkdirs();//创建多级文件夹
fi.createNewFile();//创建一个文件
二、输入流与输出流
1.字节流
每次读写是以字节为单位(计算机中所有数据存储都是以自己为单位 ) 可以读取任意文件(视频,音频…)
输入字节流:InputStream FireInputStream
输出字节流:OutputStream FireOutputStream
单个字节读写
FileInputStream in = new FileInputStream(“F:/自动骂人工具.exe”);
FileOutputStream out = new FileOutputStream("D:/自动夸人工具.exe");
int s = 0;
//in.read()每读到一个字节并返回 直到读完后返回-1
while ((s = in.read()) != -1) {
System.out.println(s);
out.write(s);
}
in.close;
out.close;
数组字节读写
FileInputStream in = new FileInputStream(“F:/自动骂人工具.exe”);
//定义输出文件的名称
FileOutputStream out = new FileOutputStream("D:/自动夸人工具.exe");
//read() write(int b) 每次只能读入 写出一个字节 效率低 读写次数多
//in.read(b); 每次读入一个byte数组个字节内容,返回实际向数组装入的字节数量 读完也是返回-1
byte [] by = new byte[1024];
int size = 0;
while((size= in.read(by))!=-1){
//每次向外写出一个byte数组个字节,从第0个开始,写size个
out.write(by,0,size);
}
in.close();
out.close();;
2.字符流
字符每次读写是以字符为单位,只能读取纯文本文件(txt,java,html)
/*FileReader reader = new FileReader("F:\\demo.txt");
FileWriter writer = new FileWriter("F:\\demo1.txt");
int c = 0;
while((c= reader.read())!=-1){
System.out.println(c);
writer.write(c);
}
reader.close();
writer.close();*/
FileReader reader = new FileReader("F:\\demo.txt");
FileWriter writer = new FileWriter("F:\\demo1.txt");
char[] ch = new char[10];
int size = 0;
while((size=reader.read(ch))!=-1){
System.out.println(size);
writer.write(ch,0,size);
}
reader.close();
writer.close();
3.缓冲处理
缓冲字节输出流 BufferedOutputStream
缓冲字节输入流 BufferedInputStream
缓冲字符输入流 BufferedReader
缓冲字符输出流 BufferedWrite
//节点流 直接负责数据读和写
FileInputStream in = new FileInputStream("E:/demo.exe");
FileOutputStream out = new FileOutputStream("E:/Demo.exe");
//处理流/包装流/缓存流(带缓冲区)
BufferedInputStream bin = new BufferedInputStream(in);
BufferedOutputStream bout = new BufferedOutputStream(out);
byte[] b = new byte[1024];
int size = 0;
while ((size = bin.read()) != -1) {
bout.write(b, 0, size);
}
bin.close();
bout.flush();//刷新缓存区
bout.close();
三、Print流
Print 打印流:只做输出没有输入
打印流分为字节打印流和字符打印流
PrintWriter:字符打印流
print方法可以打印各种类型数据
/*
PrintWriter 打印字符流 单项输出 用于只从服务器端向客户端输出内容
*/
PrintWriter p = new PrintWriter("F:/demo.html");
p.println("<a href=''>百度</a>");
p.println("<h1>一级标题</h1>");
p.println("<a href=''>百度</a>");
p.close();
四、对象输入输出流
主要的作用是用于写入对象信息与读取对象信息。 对象信息
一旦写到文件上那么对象的信息就可以做到持久化了
//User: id name 需要被序列化的类,必须实现Serializable接口,会为类生成一个序列化id号,是唯一的与类对应
/* Date date = new Date();
String s = new String("abc");
User user = new User(1,"jim");*/
//将对象信息输出到文件中 成为对象序列化 对象的类必须实现Java.io.Serializable 接口
/*FileOutputStream out = new FileOutputStream("F:/obj.txt");
ObjectOutputStream objtOut = new ObjectOutputStream(out);
objtOut.writeObject(date);
objtOut.writeObject(s);
objtOut.writeObject(user);
objtOut.flush();
objtOut.close();
*/
//对象的反序列化 将文件中的信息输入到程序中,再创建一个对象
FileInputStream in = new FileInputStream("F:/obj.txt");
ObjectInputStream objin = new ObjectInputStream(in);
Date date = (Date) objin.readObject();
String s = (String) objin.readObject();
User user = (User) objin.readObject();
System.out.println(date);
System.out.println(s);
System.out.println(user.getId()+":"+user.getName());