简介:
IO:输入/输出 (Input/Output)
流:是一种抽象概念,是对数据传输的总称,也就是说数据在设备之间的传输称为流,流的本质是数据传输
IO流就是用来处理设备之间的传输问题:
常见的应用:文件传输,文件复制,文件下载
作用:
传输数据
分类1:------按照流向分类
输入流
输出流
分类二:------按照传输的数据分类
字节流:传输的数据以字节(byte)为单位
字符流:传输的数据以字符(char)为单位
分类三:-----按功能分类
包装流:对传参的数据进行加工
节点流:直接从数据源到程序 或 从程序到指定位置
1、路径
相对路径:
从盘符的根目录开始书写
相对路径:
相对于当前文件的位置
注意:
.(点)当前路径
..(点点)上一级目录
java中的.起始与根项目下
2、字节流
体系结构及其方法:
InputStream://字节输入流 //方法: //一次读取一个字节,返回值为读取到的字节,当返回值为-1时,表示读取结束 int read(); //一次读取一组字节,读取到数组b中,返回值为本次读取到的长度,将读取到的数据从0个位置开始存储 int read(byte b[]) //一次读取一组字节,读取带数组b中,返回值为本次读取到的长度,将读取到的数据从第 off个位置开始存储 len个 int read(byte b[], int off, int len) //关闭流 void close()
OutputStream://字节输出流
//方法
//一次写入一个字节
void write(int b)
//一次写入一组字节
void write(byte[] b)
//一次写入一组字节,从off位置开始写入len个
void write(byte[] , int off , int len)
//冲刷管道
void flush()
//关闭流
void.close()
文件流
作用: 将数据写入到文件中 或 从文件中读取
FileInputStream:从文件中读取数据
FileOutputStream:将数据写入文件中
注意:
//使用1惨构造器 当目标文件不存在,会帮助我们创建一级文件 当目标文件存在,会进行覆盖式创建; //使用 2 惨构造器 追加至目标文件
内存流(字节数组流)
作用:将数据写入到内存中,或 从内存中读取数据
ByteArrayInputStream
ByteArrayOutputStream
toByteArray()//获取内存流中的数据,返回一个数组形式
缓冲流
作用:提高代码的读写率
注意,缓冲区默认的大写是8kb
BufferedInputStream
BufferedOutputStream
对象流
作用:读写对象
注意:读写的对象所属的类必须实现序列号接口(Serializable),静态属性不参与序列号,瞬时属性(transient修饰)也不参与
ObjectInputStream
ObjectOutputStream
package ioflow.bytestream;
import java.io.*;
//对象流 ---- 案例
public class ObjectStream {
static String path = "./src/ioflow/bytestream/文本文件.txt";
public static void main(String[] args) throws IOException, ClassNotFoundException {
Person person = new Person("张三", "男", 18);
read(person);
write();
File file = new File(path);
file.delete();
}
static void read(Person person) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream(path);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(person);
objectOutputStream.flush();
objectOutputStream.close();
String a = "11";
String b = "22";
String s = a + b;
System.out.println(s);
}
static void write() throws IOException, ClassNotFoundException {
FileInputStream fileInputStream = new FileInputStream(path);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
Object o = objectInputStream.readObject();
Person person = (Person) o;
System.out.println(person);
objectInputStream.close();
fileInputStream.close();
}
}
class Person implements Serializable {
String name;
String sex;
int age;
public Person(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
}
3、字符流
体系及其方法:
Reader:字符输入流
//一次读取一个字符,返回值为读取到的字符数,当返回值为-1时,表示读取结束
int read();
//一次读取一组字符
int read(char cbuf[])
//一次读取一组字符长度,从off位置开始存储,读取len个,返回值为读取到的字符长度,当返回值为-1表示结束
int read(char cbuf[], int off, int len)
//关闭流
void close()
Write:字符输出流
//方法
//一次写入一个字符
void write(int b)
//一次写入一组字符
void write(char[] b)
//一次写入一组字节,从off位置开始写入len个
void write(char[] , int off , int len)
//一次写入一个字符串
void write(String str)
//冲刷管道
void flush()
//关闭流
void.close()
文件流
FileReaber
FileWriter
注意:只能读取文本文件
转换流
InputStreamReader
将字节输入流 转换 为 字符输入流
OutputStreamWriter
将字节输出流 转换 为 字符输出流
注意:两惨的可以设定编码格式,编码格式要与文件的一致
缓冲流
作用:提高读写效率,应用于大形文件的读写
BufferedReader
readLine();读取一行
BufferedWriter
newLine();写入一个换行
标准输出流
/r/n
4、文件(File)
作用:
表示文件 或 文件夹的类
1、//创建一个新文件
createNewFile()
2、//创建一个新的一级目录
Mkdir()
3、//删除文件或空目录
Delete()
4、//取得名字
getName()
5、//获取文件目录所在的目录
getParent()
6、//是否是文件
isFile()
7、//获取文件长度(字节大小)
length()
8、//修改文件名为
renameTo()
9、//判断File路径下的文件是否存在
exists()
10、//获取文件的绝对路径
getAbsolutePath()
11、//获取文件上一级目录
getParent()
12、//是否是目录
ifDirectory()
13、//列出目录下所有的文件路径
listFiles()
//案例
//递归查询文件操作
public class RecursiveQuery {
//确定遍历的文件目录
private static String path = "E:\\千锋学习资料23";
public static void main(String[] args) {
File file = new File(path);
recursive(file);
}
private static void recursive(File file) {
if (file.isFile()) {
System.out.println(file.getAbsolutePath());
return;
}
File[] files = file.listFiles();
for (File f : files) {
recursive(f);
}
}
}
5、文件过滤器
FileFilter:文件过滤器
FileNameFilter:文件名称过滤器
package ioflow.file;
import java.io.File;
import java.io.FilenameFilter;
//文件过滤器 ---------- 案例
public class FileFiltrationImplement {
//确定遍历的文件目录
private static String path = "E:\\千锋学习资料23\\day11\\笔记";
public static void main(String[] args) {
File file = new File(path);
File[] files = file.listFiles(new FilenameFilter() {//实现匿名内部类FilenameFilter(文件名称过滤器)
@Override
public boolean accept(File dir, String name) {//dir是父级目录,name是列出后dir下的所有文件
//判断如果文件以.md结尾的文件 返回为true 添加如数组 files
if (name.endsWith(".md")) {
return true;
}
return false;//不添加如数组
}
});
for (File f : files) {
System.out.println(f.getAbsolutePath());
}
}
}
6、Properties
作用:
以键值对的形式 存储 一组数据
方法:
load(输入流):加载 getProperty(key)通过key或去value store(输出流,注释):保存
package ioflow.properties;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
//properties应用 ------ 案例
public class PropertiesApplication {
private static String path = "src//ioflow//properties//mysql.properties";
public static void main(String[] args) throws IOException {
Properties properties = new Properties();
properties.put("userName", "root");
properties.put("port", "8080");
properties.put("password", "123456");
//利用字符文件流(FileWriter) 保存properties内容
FileWriter fileWriter = new FileWriter(path);
properties.store(fileWriter, "MySql");//保存
fileWriter.close();
//读取后缀为properties配置文件的信息
FileReader fileReader = new FileReader(path);
properties.load(fileReader);//加载
String userName = properties.getProperty("userName");//自动转换类型
Object port = properties.get("port");//需要强转
String password = properties.getProperty("password");
System.out.println(userName);
System.out.println(port);
System.out.println(password);
}
}