目录
1.1转换流
1.1.1概述
1.1.2 InputStreamReader
1.2打印流
1.2.1概述
1.2.2 使用
1.3 对象流 / 序列化
1.3.1 概述
?1.3.2序列化
1.3.4注意
?1.4serialVersionUID
?1.5Transient
1.6 File
1.6.1 概述
1.6.2? 构造方法
1.6.3?常用方法?
1.6.4 使用方式
?
1.1转换流
1.1.1概述
输入流 : InputStreamReader
输出流 : OutputStreamWriter?
特点 :?
转换流是指将字节流向字符流的转换 ,主要有InputStreamReader和OutputStreamWriter
InputStreamReader : 主要是将字节流输入转换为字符输入流
OutputStreamWriter : 主要数将字节输出流转换为字符输出流
package com;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
/**
* 字节输入流 转 字符输入流
*
* @author 人间失格
* @data 2021年10月27日下午6:41:35
*/
public class IO_01_InputStreamReader {
public static void main(String[] args) throws Exception {
//字节输入
FileInputStream fis = new FileInputStream("D:/a.txt");
//转为字符输入
InputStreamReader isr = new InputStreamReader(fis);
//缓冲流 提高效率
BufferedReader br = new BufferedReader((isr));
String temp = null ;
while ((temp=br.readLine())!=null){
System.out.println(temp);
}
}
}
1.2打印流
1.2.1概述
特点 :?
打印流是输出最方便的类
包含字节打印流PrintStream , 字符打印流PrintWriter
PrintStream是OutputStream的子类 , 把一个输出流的实例传递到打印流之后,可以更加方便的输出内容,相当于把输出流重新包装一下
PrintStream类的print()方法被重载很多次print(int i)、print(boolean b)、print(char c)
标准输入/输出
Java的标准输入/输出分别通过System.in和System.out来代表,在默认的情况下分别代表键盘和显示器,当程序通过System.in来获得输入时,实际上是通过键盘获得输入。当程序通过System.out执行输出时,程序总是输出到屏幕。
在System类中提供了三个重定向标准输入/输出的方法
static void setErr(PrintStream err) : 重定向"标准"错误输出流
static void setIn(InputStream in) : 重定向"标准"输入流
ststic void setOut(PrintSteam) :? 重定向"标准"输出流
1.2.2 使用
package com;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
/**
* 打印流
*
* @author 人间失格
* @data 2021年10月27日下午6:59:28
*/
public class IO_02_PrintStream {
public static void main(String[] args) throws FileNotFoundException {
//创建字节输出流
FileOutputStream fos = new FileOutputStream("D:/b.txt");
//封装为打印流
PrintStream ps = new PrintStream(fos);
//调用方法进行打印
//换行
ps.println();
ps.println("我想吃烤肉呀!!");
ps.println("可是我在敲代码!!!");
ps.println(true+"我是Boolean型");
ps.println("数子也可以呢 : "+12345);
//使用System自带的打印流 , 默认打印到控制台
System.out.println("=====");
//更改打印位置,把默认打印到控制台的打印到指定的位置
System.setOut(ps);
System.out.println();
System.out.println("也没有钱去吃,555");
}
}
1.3 对象流 / 序列化
1.3.1 概述
?序列化 : ObjectOutputStream 把对象保存在硬盘中 ? ?反序列化 : ObjectInputStream : 把硬盘中的对象载入到内存中
?创建对象的几种方式 :? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1. new用的是最多最频繁的 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2. 反射机制 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3. clone 克隆 已经过时,被反序列化代替了 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?4. 反序列化 ?目的 : 长期存储 , 对象传递 ? ?应用场景 :? ? ? ? ? ? ? ? ? ? ? 序列化就是将数据对象转换为二进制流,从而可以进行数据持久化和网络传输 ? ? ? ? ? ? ? ? ? ? 如果对象不进行序列化操作,那么没有办法存储和传递 ? ? ? ? ? ? ? ? ? ?? ? ?数据对象->序列化->二进制流->加密处理->网络传递->解密处理->反序列化->数据对象 ? ? ? ?某个对象想要被序列化,那么该类必须实现Serializable接口,该接口没有任何方法功能,只是一种标记
?1.3.2序列化
package com;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
/**
* 序列化 : ObjectOutputStream 把对象保存在硬盘中
*
* 反序列化 : ObjectInputStream : 把硬盘中的对象载入到内存中
*
* 创建对象的几种方式 :
* 1. new用的是最多最频繁的
* 2. 反射机制
* 3. clone 克隆 已经过时,被反序列化代替了
* 4. 反序列化
* 目的 : 长期存储 , 对象传递
*
* 应用场景 :
* 序列化就是将数据对象转换为二进制流,从而可以进行数据持久化和网络传输
* 如果对象不进行序列化操作,那么没有办法存储和传递
*
* 数据对象->序列化->二进制流->加密处理->网络传递->解密处理->反序列化->数据对象
*
* 某个对象想要被序列化,那么该类必须实现Serializable接口,该接口没有任何方法功能,只是一种标记
*
* @author 人间失格
* @data 2021年10月27日下午7:27:54
*/
public class IO_04_ObjectOutputStream {
public static void main(String[] args) throws Exception {
//创建对象
User user = new User("大聪明", 20);
//创建输出流
FileOutputStream fos = new FileOutputStream("D:/e.txt");
//创建对象流
ObjectOutputStream oos = new ObjectOutputStream(fos);
//写对象
oos.writeObject(user);
//刷缓存,关闭资源
oos.flush();
oos.close();
}
}
1.3.3反序列化
package com;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.ObjectInputStream;
public class IO_05_ObjectInputStream {
public static void main(String[] args) throws Exception {
//创建输入流
FileInputStream fis = new FileInputStream("D:/e.txt");
//从硬盘到内存
ObjectInputStream ois = new ObjectInputStream(fis);
Object o = ois.readObject();
System.out.println(o);
User user = (User) o ;
}
}
1.3.4注意
要序列化的对象,该类必须实现Serializable接口
?1.4serialVersionUID
?1.5Transient
1.6 File
1.6.1 概述
java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关
File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对 象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。
File对象可以作为参数传递给流的构造器
1.6.2? 构造方法
1.6.3?常用方法?
获取功能:
?public String getAbsolutePath():获取绝对路径
?public String getPath() :获取路径
?public String getName() :获取名称
?public String getParent():获取上层文件目录路径。若无,返回null
?public long length() :获取文件长度(即:字节数)。不能获取目录的长度。
?public long lastModified() :获取最后一次的修改时间,毫秒值
?public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组
?public File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数组
重命名功能:
?public boolean renameTo(File dest):把文件重命名为指定的文件路径
判断功能:
??public boolean isDirectory():判断是否是文件目录
?public boolean isFile() :判断是否是文件
?public boolean exists() :判断是否存在
?public boolean canRead() :判断是否可读
?public boolean canWrite() :判断是否可写
?public boolean isHidden() :判断是否隐藏
创建删除功能:
?public boolean createNewFile() :创建文件。若文件存在,则不创建,返回false
?public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。 如果此文件目录的上层目录不存在,也不创建。
?public boolean mkdirs() :创建文件目录。如果上层文件目录不存在,一并创建
注意事项:如果你创建文件或者文件目录没有写盘符路径,那么,默认在项目 路径下。
?public boolean delete():删除文件或者文件夹
删除注意事项:
Java中的删除不走回收站。
要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录
1.6.4 使用方式
package com;
import java.io.File;
import java.io.IOException;
/**
* File 进行文件和文件夹操作,不能访问数据
*
* @author 人间失格
* @data 2021年10月27日下午8:14:33
*/
public class IO_06_File_01 {
public static void main(String[] args) throws IOException {
//创建一个文件对象
File f1 = new File("F:\\111\\222\\333");
//获取全路径
System.out.println(f1.getAbsolutePath());
//判断是否是文件
System.out.println(f1.isFile());
//判断是否是目录
System.out.println(f1.isDirectory());
//获取父路径
System.out.println(f1.getParent());
//父目录对象
System.out.println(f1.getParentFile());
//判断该目录或该文件 是否存在
System.out.println(f1.exists());
//创建
f1 = new File("D:/a/b/c");
if(!f1.exists()){
//创建文件,如果有该文件就不创建了,但是不会创建目录
//如果创建了,返回true , 如果没有创建 就返回false
boolean isCreate = f1.createNewFile();
System.out.println(isCreate);
}else {
//程序到这里说明存在
//删除该文件
f1.delete();
}
f1 =new File("F:\\111\\222\\333");
//获取所有子文件
File [] subFile = f1.listFiles();
for(File file : subFile){
System.out.println(file.getName());
}
}
}
|