Java IO基础
Java IO是什么
Java.io提供了全面的IO接口。包括:文件读写、标准输入输出设备等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。
流是什么
- 流可以理解为数据的序列。当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。
流就像一个通水的管道,连接着数据源和目的地,当需要输入或输出数据时,只需要在数据源和目的地之前连接适当的管道就可以了了。
流的分类
根据流向分为: 1. 输入流表示一个源读取数据 2.输出流表示向一个目标写入数据
根据数据传输单位分为:1.字节流:以字节为单位传输数据的流 2.字符流:以字符为单位传输数据的流
按功能分: 1.节点流: 用于直接操作目标设备的流 2.过滤流:是对一个已存在的流的连接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能
Java IO的作用
- 文件访问: File、FileInputStream、FileOutputStream、FileWriter、FileReader
- 网络访问:Scoket
- 内存缓存访问:
- 线程内部通信(管道)
- 缓冲
- 过滤
- 解析
- 读写文本 (Readers / Writers)
- 读写基本类型数据 (long, int etc.)
- 读写对象
文件的CRUD
- 创建文件
2. 查看文件信息
// 根据文件路径创建文件, 如果文件已存在则不创建
File file = new File(String filePath);
// 根据parent抽象路径名和child路径名字符串创建一个新的文件
File file = new File(File parent, String child);
// 根据 parent 路径名字符串和 child 路径名字符串创建一个新文件
File file = new File(String parent, String child);
// 测试是否可以读取此抽象路径名表示的文件, 返回boolean类型
3. 修改文件信息
file.canRead();
// 测试是否可以修改此抽象路径名表示的文件, 返回boolean类型
file.canWrite();
// 测试此抽象路径名表示的文件或目录是否存在, 返回boolean类型
file.exists();
// 返回此抽象路径名的绝对路径名形式, 返回File类型
file.getAbsoluteFile();
//回此抽象路径名的绝对路径名字符串
file.getAbsolutePath();
// 返回由此抽象路径名表示的文件或目录的名称
file.getName();
// 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null
file.getParent();
// 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null
file.getParentFile();
//将此抽象路径名转换为一个路径名字符串
file.getPath();
OutputStream out = new FileOutputStream(file);
out.write('test write to file!');
out.flush();
out.close();
// 设置此抽象路径名指定的文件或目录的最后一次修改时间
file.setLastModified(long time);
// 设置此抽象路径名的所有者或所有用户的读权限
file.setReadable(boolean readable, boolean ownerOnly);
//标记此抽象路径名指定的文件或目录,从而只能对其进行读操作
file.setReadOnly();
// 设置此抽象路径名的所有者或所有用户的写权限
file.setWriteable(boolean writeable, boolean ownerOnly);
- 删除文件
file.delete();
#### 目录的CRUD - 创建目录
// 创建此抽象路径名指定的目录
file.mkdir();
// 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录
file.mkdirs();
- 查看目录的信息
// 测试此抽象路径名表示的文件是否是一个目录
file.isDirectory();
// 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录
file.list();
// 返回一个抽象路径名数组(File[]),这些路径名表示此抽象路径名表示的目录中的文件
file.listFile();
### 示例代码
7. 文件CRUD
private File file;
// 创建文件
public void testCreateFile() {
file = new File("filecrud.txt");
file = new File("D:\\", "filecrud.txt");
File parent = new File("D:\\");
file = new File(parent, "filecrud1.txt");
// 向文件写入数据,不写入数据则不会创建文件
try {
// 实例化OutputStream对象
OutputStream outputStream = new FileOutputStream(file);
// 向文件写入数据,
outputStream.write("test file crud!".getBytes());
// 清理流中的数据
outputStream.flush();
// 关闭输出流
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
// 查看文件信息
public void testFileInfo() {
System.out.println("canRean=" + file.canRead());
System.out.println("canWrite=" + file.canWrite());
System.out.println("exists=" + file.exists());
System.out.println("absoluteFile=" + file.getAbsoluteFile());
System.out.println("absolutePath=" + file.getAbsolutePath());
System.out.println("name=" + file.getName());
System.out.println("parent=" + file.getParent());
System.out.println("parentFile=" + file.getParentFile());
System.out.println("path=" + file.getPath());
}
// 更新文件信息
public void testUpdateFileInfo() {
file.setLastModified(new Date().getTime() - <span class="hljs-number">10000L);
System.out.println("before read only canWrite=" + file.canWrite());
file.setReadOnly();
System.out.println("after read only canWrite=" + file.canWrite());
System.out.println("before write able canWrite=" + file.canWrite());
file.setWritable(false);
System.out.println("after write able canWrite=" + file.canWrite());
System.out.println("before read able canRead=" + file.canRead());
file.setReadable(false);
System.out.println("before read able canRead=" + file.canRead());
System.out.println("before read able canRead=" + file.canRead());
file.setReadable(true);
System.out.println("before read able canRead=" + file.canRead());
}
// 删除文件
public void testDeleteFile() {
file.delete();
}
public static void main(String []args) {
FileCRUD fileCRUD = new FileCRUD();
fileCRUD.testCreateFile();
fileCRUD.testFileInfo();
fileCRUD.testUpdateFileInfo();
fileCRUD.testDeleteFile();
}
}
- 目录CRUD
File dir = new File("D:\test\testDir");
public void testCreateDir() {
// mkdir如果path中是多级目录, 则不能创建目录
//dir.mkdir();
dir.mkdirs();
}
public void testDirInof() {"D:\\test");
System.out.println(Arrays.toString(dir.list()));
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
System.out.println(dir.isHidden());
System.out.println(Arrays.toString(dir.listFiles()));
}
public void testDeleteDir() {` // 如果dir中存在子目录或文件, 则不能删除指定路径的目录
dir.delete();
}
public static void main(String []args) {` DirCRUD dirCRUD = new DirCRUD();
dirCRUD.testCreateDir();
dirCRUD.testDirInof();
dirCRUD.testDeleteDir();
}
}