树图思维导图提供 文件File,IO流 在线思维导图免费制作,点击“编辑”按钮,可对 文件File,IO流 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:98f3bd2b32b4ef63dbd1e593ab465783
文件File,IO流思维导图模板大纲
概述
文件和文件夹路径名的抽象表现形式
三种构造方法
File(String pathname)
通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
代码案例:(参数是完整的文件路径) File file01 = new File("H:\\aaa\\hello.txt");
File(String parent, String child)
从父路径名字符串和子路径名字符串创建新的File实例
代码案例:(参数是父路径和子路径) File file02 = new File("H:\\aaa", "hello.txt");
File(File parent, String child)
从父文件对象和子路径名字符串创建新的File实例
代码案例:(参数父文件对象和子路径) File fileaaa = new File("H:\\aaa"); File file03 = new File(fileaaa, "hello.txt");
成员方法
1.创建一个由该路径名命名的新空文件,并返回Boolean数据
public boolean createNewFile()
代码案例: File file01 = new File("mymodule/mm1"); System.out.println(file01.createNewFile());
2.创建单级目录(文件夹)
public boolean mkdir()
代码案例: File file01 = new File("mymodule/a"); System.out.println(file01.mkdir());
创建多级目录(文件夹)
public boolean mkdirs()
代码案例: File file03 = new File("mymodule/m/n/x"); //mkdirs可以创建 多级目录 包括不存在的目录 System.out.println(file03.mkdirs());
4.删除
删除由此抽象路径名表示的文件或目录
public boolean delete()
特点: 1.删除后不会进入回收站; 2.只能删除空文件夹
代码案例: File file1 = new File("x/y/z.mp3"); System.out.println(file1.delete());
5.判断
1.判断路径名表示的File是否为目录(文件夹)
public boolean isDirectory()
代码案例: File file = new File("module01\\src\\com\\heima\\test2", "Demo01.java"); System.out.println(file.isDirectory());
2.判断路径名表示的File是否为文件
public boolean isFile()
代码案例: System.out.println(file.isFile());
3.判断路径名表示的File是否存在
public boolean exists()
代码案例: System.out.println(file.exists());
6.获取
1.获取绝对路径名的字符串
public String getAbsolutePath()
代码案例: File file02 = new File("mymodule/a/b"); System.out.println(file02.getAbsolutePath());//获取绝对路径 C:\Users\halon\Desktop\java52\day09\project09\mymodule\a\b
2.获取创建文件对象的时候传入的路径
public String getPath()
代码案例: System.out.println(file02.getPath()); //获取创建文件对象的时候传入的路径 mymodule/a/b
3.获取文件名字
public String getName()
代码案例: System.out.println(file02.getName()); //获取文件名字 b
4.获取当前目录里 的文件和文件夹的File对象放到一个数组里,返回数组
public File[] listFiles()
代码案例: File file03 = new File("mymodule/m/n"); //获取当前目录里 的文件和文件夹的File对象放到一个数组里 File[] files = file03.listFiles();
5.获取文件的大小
public long length()
file01.length()
路径方式
绝对路径
从盘符开始,一个文件的完整路径。
相对路径
相对于当前文件所在目录
./表示当前文件所在目录,作为开头可以省略
../表示长一层目录
分隔符
常用分隔符: /或者\\
File.separator
代码案例: System.out.println("a" + File.separator + "b" + File.separator + "n");
子主题 5
子主题 4
概述
IO:输入(Input)/输出(Output)
流:指数据,也叫数据流
IO流就是用来处理设备间数据传输问题的.常见的应用: 文件复制; 文件上传; 文件下载,音视频播放
分类
按数据的流向
输入流
读数据, 把数据从其他设备上读取到内存中的流。
输出流
写数据, 把数据从内存中写出到其他设备上的流。
按照数据类型来分
字节流
以字节为单位,读写数据的流。
字节输入流(FileInputStream)
构造方法
创建FileInputStream实例对象,参数传入File对象
FileInputStream(File file)
代码案例: FileInputStream fis = new FileInputStream(file);
创建FileInputStream实例对象,参数传入正确的文件路径名
FileInputStream(String name)
代码案例: FileInputStream fis = new FileInputStream("module01/bbb/a.txt");
注意事项:当你创建一个流对象时,必须传入一个文件或者文件路径。该路径下,**如果没有该文件,会抛出FileNotFoundException**
成员方法
一次读取一个字节
public void close()
代码案例: int read = fis.read();
将数据先读取到数组缓存区,并返回读取长度,没有数据返回-1.
public int read(byte[] b)
byte[] bs = new byte[10]; int result = fis.read(bs); //数组长度为10,一次性读10个字节长度
关闭流
public void close()
代码案例:fis.close();
字节输出流(FileOutputStream)
抽象类,表示字节输出流的所有类的超类
构造方法
可以传入file对象作为参数,来创建对象
public FileOutputStream(File file)
创建文件输出流以指定的路径写入文件。
public FileOutputStream(String name)
代码实现的三步骤 (一次写一个字节的情况)
1创建字节输出流对象
2调用字节输出流对象的写数据方法
3释放资源
成员方法
将指定的字节写入此文件输出流 一次写一个字节数据
void write(int b)
代码案例: fos.write(100);
以一个字节数组的形式进行书写
void write(byte[] b)
代码案例: fos.write(new byte[]{66, 67, 68, 69, 70});
以len数量,从off偏移量的字节数组写入数据
void write(byte[] b, int off, int len)
byte[] bs = {71, 72, 73, 74, 75}; fos.write(bs, 1, 3); //把bs数组 偏移一个 然后写到文件里3个字节 这里是72 73 74写到文件里了
写入字符串格式,可以通过getBytes转换为数据:fos.write("你好fdsfs".getBytes());
如何实现换行和追加数据
换行
\r\n
代码案例: fos.write("\r\n".getBytes());
追加数据
public FileOutputStream(String name,boolean append)
代码案例: FileOutputStream fos = new FileOutputStream("module01/aaa/c.txt",true); 第二个参数为true 表示从后面追加写入数据
字符流
以字符为单位,读写数据的流
写入字符流(FileWrite)
构造方法
根据给定的 File 对象构造一个 FileWriter 对象
FileWriter(File file)
代码案例: FileWriter fw = new FileWriter(file);
根据给定的 File 对象构造一个 FileWriter 对象,并明确后面是否在续写
FileWriter(File file, boolean append)
根据给定的文件名构造一个 FileWriter 对象
FileWriter(String fileName)
代码案例: FileWriter fw = new FileWriter("qqqqqq.txt");
根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象
FileWriter(String fileName, boolean append)
代码案例: FileWriter fw = new FileWriter("qqqqqq.txt",true);
成员方法
1.写一个字符
void write(int c)
代码案例: fw.write(100);
2.写入一个字符数组
void write(char[] cbuf)
代码案例:char[] cs = {'a', 'g', '啊', '吃'}; fw.write(cs);
3.写入字符数组的一部分
void write(char[] cbuf, int off, int len)
char[] cs = {'a', 'g', '啊', '吃'}; fw.write(cs,2,3);
4.写一个字符串
void write(String str)
代码案例: fw.write("饭了,吃烤鸭,吃宫爆鸡丁,吃鱼香肉丝");
5.写一个字符串的一部分
void write(String str, int off, int len)
代码案例: fw.write("abcdefg", 1, 3);//跳过1个写入3个
读取字符流
构造方法
通过传入file对象参数,创建FileReader对象
FileReader(File file)
代码案例: FileReader fr = new FileReader(file);
传入文件名的方式创建FileReader对象
FileReader(String fileName)
代码案例: FileReader fr = new FileReader("module01/ccc.txt");
成员方法
一次读取一个字符
int read()
代码案例: fr.read();
一次读取一个字符数组
int read(char[] cbuf)
代码案例: char[] cs = new char[3]; fr.read(cs);
字符串中的编码解码问题
成员方法
1.将字符串转化为相应的字节数组
byte[] getBytes()
2.使用指定的编码,将字符串转换为字节数组
byte[] getBytes(String charsetName)
3.使用平台默认的字符集,解码指定的字节数组,转换为字符串
String(byte[] bytes)
4.通过指定的字符集解码指定的字节数组来创建字符串
String(byte[] bytes, String charsetName)
介绍
BufferedWriter
将文本写入字符输出流,缓冲字符
构造方法
创建字符缓冲输出流对象: BufferedWriter(Writer out)
代码案例: bw.write(20)
特有方法
换行
void newLine()
代码案例: bw.newLine();
BufferedReader
从字符输入流读取文本,缓冲字符
构造方法
创建字符缓冲输入流对象: BufferedReader(Reader in)
代码案例: br.read();读一个 br.read(c);读一个字符数组
特有方法
每次一行一行,读取数据
String readLine()
代码案例 br.readLine()
InputStreamReader
构造方法
使用默认字符编码创建InputStreamReader对象
InputStreamReader(InputStream in)
代码案例: OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));
使用指定的字符编码创建InputStreamReader对象
InputStreamReader(InputStream in,String chatset)
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"),"GBK");
OutputStreamWriter
构造方法
使用默认字符编码创建OutputStreamWriter对象
OutputStreamWriter(OutputStream out)
代码案例: InputStreamReader isr = new InputStreamReader(new FileInputStream("myCharStream\\osw.txt"));
使用指定的字符编码创建OutputStreamWriter对象
OutputStreamWriter(OutputStream out,String charset)
代码案例: InputStreamReader isr = new InputStreamReader(new FileInputStream("myCharStream\\osw.txt"),"GBK");
对象序列化介绍
1.对象序列化:把对象转换为可以存储或传输的字节序列 的过程
2.这种机制就是使用一个字节序列表示一个对象,该字节序列包含:对象的类型、对象的数据和对象中存储的属性等信息
3.字节序列写到文件之后,相当于文件中持久保存了一个对象的信息。反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化
对象序列化流(ObjectOutputStream)
构造方法
创建一个写入指定的OutputStream的ObjectOutputStream
ObjectOutputStream(OutputStream out)
代码案例: //创建对象输出流 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("animal.txt"));
序列化对象的方法
将指定的对象写入ObjectOutputStream
void writeObject(Object obj)
代码案例: //Anima类要实现Serializable接口 Anima a = new Anima("大象", 3); //把对象写入 oos.writeObject(a);
对象反序列化流(ObjectInputStream)
实现前提: ObjectInputStream反序列化先前使用ObjectOutputStream编写的原始数据和对象
构造方法
创建从指定的InputStream读取的ObjectInputStream
ObjectInputStream(InputStream in)
代码案例: //创建对象输出流 ObjectInputStream oos = new ObjectInputStream(new FileInputStream("animal.txt"));
反序列化对象方法
从ObjectInputStream读取一个对象
Object readObject()
代码案例: //读取出对象 然后强转为Anima对象 这个过程也叫反序列化 Anima a = (Anima) oos.readObject();
serialVersionUID
概述:
1.serialVersionUID 如果没有写,那么java会自动生成一个数据
2.在序列化的时候serialVersionUID 也会被保存到序列化的数据里
3.在类被修改的时候,serialVersionUID 会被java重新生成一个新的值
4.在反序列化的时候, 会检查之前序列化的数据里的serialVersionUID 和 新生成的serialVersionUID 是否一致,如果不一致,反序列化失败
注意事项
1 如果这个类发生了变动,那么之前序列化的数据依然希望可以反序列化 那么就不要改变这个
2 如果这个类发生了变动,那么之前序列化的数据希望作废不能再反序列化, 那么就把这个值修改一下
例子
private static final long serialVersionUID = 1L;
transient( 会使用 )
特点
给该成员变量加transient关键字修饰,该关键字标记的成员变量不参与序列化过程
代码案例: FileOutputStream fos = new FileOutputStream("module01/aaa/b.txt"); fos.write(99);//写入数字会生成相应码表字母 fos.close();//最后一定要释放资源思维导图模板大纲
注意事项: 一个对象要想被序列化,该对象所属的类必须必须实现Serializable 接口思维导图模板大纲
树图思维导图提供 环境设计各业务版块流程图 在线思维导图免费制作,点击“编辑”按钮,可对 环境设计各业务版块流程图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:bb759aacdf9404fdef4191a557718654
树图思维导图提供 工艺流程图 在线思维导图免费制作,点击“编辑”按钮,可对 工艺流程图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:a8e31ea83041e28a9ece5f7d7121fc30