目录
IO入门
IO概念
IO指的就是输入/输出(Input/Output)。
输入(Input)指的是:可以让程序从外部系统获得数据(核心含义是“读”,读取外部数据)。
输出(Output)指的是:程序输出数据给外部系统从而可以操作外部系统(核心含义是“写”,将数据写出到外部系统)。
java.io包为我们提供了相关的API,实现了对所有外部系统的输入输出操作。重要的五类三接口如下
按功能,可以把流分为 节点流 和 处理流。
节点流:可以直接从数据源或目的地读写数据,是IO操作的第一线。
处理流:不能直接,是其他流进行封装,目的简化操作和提高性能。
按属性,可以把流分为 字节流 和 字符流。
InputStream和OutputStream是字节流。
字符流的底层还是字节流,但是自动搜寻了指定的码表,提高了效率。
Reader 和 Writer是字符流。
File类
FIle是文件和目录路径名的抽象表示。
文件的创建
import java.io.File;
public class FileDemo01 {
public static void main(String[] args) {
String path = "D:/Java/IO/ball.png";
// 方式1 构建File 对象
File src = new File(path);
System.out.println(src.length());
// 方式2 构建File 对象
File src2 = new File("D:/Java/IO/","ball.png");
System.out.println(src.length());
}
}
import java.io.File;
import java.io.IOException;
public class FileDemo01 {
public static void main(String[] args) throws IOException {
String path = "D:/Java/IO/ball.png";
File src = new File(path);
System.out.println("是否存在:"+src.exists());
System.out.println("是否是文件:"+src.isFile());
System.out.println("是否是文件夹:"+src.isDirectory());
//创建一个新的文件,只有在不存在的时候才可以创建
File src1 = new File("D:/Java/IO/ball.txt");
boolean flag = src1.createNewFile();
System.out.println(flag);
boolean flag1 = src1.delete(); //删除文件,是有返回值的
System.out.println(flag1);
}
}
统计文件夹的大小
mkdir():确保上级目录存在,不存在则创建失败。
mkdirs():上级目录可以不存在,不存在一同创建,(推荐使用)。
list(): 列出下级名称
listFiles():列出下级File名称
import java.io.File;
import java.io.IOException;
public class FileDemo01 {
public static void main(String[] args) throws IOException {
String path = "D:/Java/IO/ball.png";
File src = new File(path);
System.out.println("是否存在:"+src.exists());
System.out.println("是否是文件:"+src.isFile());
System.out.println("是否是文件夹:"+src.isDirectory());
//创建一个新的文件,只有在不存在的时候才可以创建
File src1 = new File("D:/Java/IO/ball.txt");
boolean flag = src1.createNewFile();
System.out.println(flag);
boolean flag1 = src1.delete(); //是有返回值的
System.out.println(flag1);
//创建一个新的文件夹
File dir = new File("D:/Java/IO/dir");
boolean flag2 = dir.mkdirs();
System.out.println(flag2);
//列出下级名称 和 下级对象
File dir2 = new File("D:/Java/IO");
String[] subNames = dir2.list(); //表示列表里元素是String
for(String s:subNames) {
System.out.println(s);
}
File[] subFiles = dir2.listFiles();
for(File s:subFiles){
System.out.println(s.getAbsolutePath());
}
}
}
递归方法遍历文件夹
import java.io.File;
public class FileDemo02 {
public static void main(String[] args) {
File src = new File("D:/Java/IO");
printName(src,1);
}
public static void printName(File src, int deep){
for(int i=0;i<deep;i++){
System.out.print("-");
}
System.out.println(src.getName());
if(src==null||!src.exists()){ //递归头
return;
}else if(src.isDirectory()){
for(File s:src.listFiles()){
printName(s,deep+1); // 递归体
}
}
}
}
运行结果:
插播一个小基础
public class TestAdd {
public static void main(String[] args) {
int a=1;
System.out.println(a++); //先传入a,再执行自增
System.out.println(a);
System.out.println(a+1); //先执行加法,再传入
System.out.println(a);
System.out.println("************");
int b=1;
System.out.println(++b); //先自增,再传入
System.out.println(b);
}
}
获取文件夹大小
import java.io.File;
public class FileDemo03 {
public static void main(String[] args) {
File src = new File("D:/Java/IO");
count(src);
System.out.println(len);
}
private static long len = 0;
public static void count(File src){
// 获取大小
if(src!=null&&src.exists()){
if(src.isFile()){
len+=src.length();
}else{
for(File s:src.listFiles()){
count(s);
}
}
}
}
}