目录
IO流
1.数据源
2.流
3.File
文件名、路径名 文件状态 文件长度 创建新文件、删除文件 创建目录 下级名称 下级File 根路径
IO流
1.数据源
提供数据的原始媒介。常见的数据源有:数据库、文件、其他程序、内存、网络连接、IO设备。
数据源分为:源设备、目标设备。
源设备:为程序提供数据,一般对应输入流。 目标设备:程序数据的目的地,一般对应输出流。
2.流
流是一个抽象、动态的概念,是一连串连续动态的数据集合。
流的分类:
1)按流的方向分
输入流:数据流向是数据源到程序(以InputStream、Reader结尾的流)。
输出流:数据流向是程序到目的地(以OutPutStream、Writer结尾的流)。
2)按处理的数据单元分
字节流:以字节为单位获取数据,命名上以Stream结尾的流一般是字节流,如FileInputStream、FileOutputStream。
字符流:以字符为单位获取数据,命名上以Reader/Writer结尾的流一般是字符流,如FileReader、FileWriter。
3)按处理对象不同分类
节点流:可以直接从数据源或目的地读写数据,如FileInputStream、FileReader、DataInputStream等。
处理流:不直接连接到数据源或目的地,是”处理流的流”。通过对其他流的处理提高程序的性能,如BufferedInputStream、BufferedReader等。处理流也叫包装流。
节点流处于IO操作的第一线。
3.File
import java.io.File;
public class TestPath {
public static void main(String[] args) {
// \ /名称分隔符 separator
String path = "C:/Users/华为/Desktop/ball.png";
System.out.println(path);
System.out.println(File.separatorChar); // /
//建议 1. / 2.常量拼接
path = "C:"+File.separator+"Users"+File.separator+"华为"+File.separator+"Desktop"+File.separator+"ball.png";
System.out.println(path); //C:\Users\华为\Desktop\ball.png
}
}
构造器:
import java.io.File;
public class TestPath02 {
public static void main(String[] args) {
// 构建File对象
//第一种
String path = "C:/Users/华为/Desktop/ball.png";
File src = new File(path);
System.out.println(src.length());
//第二种
src = new File("C:/Users/华为/Desktop","ball.png");
System.out.println(src.length());
src = new File("C:/Users/华为","Desktop/ball.png");
System.out.println(src.length());
//第三种
src = new File(new File("C:/Users/华为/Desktop"),"ball.png");
System.out.println(src.length());
/*
* 相对路径与绝对路径
* 1)存在盘符:绝对路径
* 2)不存在盘符:相对路径
*/
//绝对路径
File src1 = new File(path);
System.out.println(src1.getAbsolutePath());//C:\Users\华为\Desktop\ball.png
//相对路径
System.out.println(System.getProperty("user.dir"));//用户目录 C:\Users\华为\Desktop
src1 = new File("ball.png");
System.out.println(src1.getAbsolutePath());//C:\Users\华为\Desktop\ball.png
}
}
文件名、路径名
import java.io.File;
public class TestFile {
public static void main(String[] args) {
File src = new File("C:\\Users\\华为\\Desktop\\ball.png");
//基本信息
System.out.println("名称:"+src.getName());
System.out.println("路径:"+src.getPath());
System.out.println("绝对路径:"+src.getAbsolutePath());
System.out.println("父路径:"+src.getParent());
System.out.println("父对象:"+src.getParentFile().getName());
System.out.println("-------------");
src = new File("ball.png");
System.out.println("父路径:"+src.getParent());
}
}
运行结果:
文件状态
import java.io.File;
public class TestFile02 {
public static void main(String[] args) {
File src = new File("C:/Users/华为/Desktop/ball.png");
System.out.println("是否存在:"+src.exists()); //true
System.out.println("是否文件:"+src.isFile()); //true
System.out.println("是否文件夹:"+src.isDirectory()); //false
System.out.println("----------");
src = new File("C:/Users/华为/Desktop");
System.out.println("是否存在:"+src.exists()); //true
System.out.println("是否文件:"+src.isFile()); //false
System.out.println("是否文件夹:"+src.isDirectory()); //true
System.out.println("----------");
src = new File("ball.png");
System.out.println("是否存在:"+src.exists()); //true
System.out.println("是否文件:"+src.isFile()); //true
System.out.println("是否文件夹:"+src.isDirectory()); //false
//文件状态
src = new File("xxx");
if(!src.exists()) {
System.out.println("文件不存在");
}else {
if(src.isFile()) {
System.out.println("文件操作");
}else {
System.out.println("文件夹操作");
}
}
}
}
文件长度: length():字节数
import java.io.File;
public class TestFile03 {
public static void main(String[] args) {
File src = new File("C:/Users/华为/Desktop/ball.png");
System.out.println("长度:"+src.length()); //2725
src = new File("C:/Users/华为/Desktop");
System.out.println("长度:"+src.length()); //28672
}
}
创建新文件、删除文件
注:con com3.....操作系统的设备名,不能正确创建
import java.io.File;
import java.io.IOException;
public class TestFile04 {
public static void main(String[] args) throws IOException {
File src = new File("C:/Users/华为/Desktop/l.txt");
boolean flag = src.createNewFile();
System.out.println(flag); //true 不存在才创建,存在创建成功,创建的不是文件夹
flag = src.delete(); //删除已经存在的文件
System.out.println(flag);
}
}
创建目录以及列出下级
mkdir():确保上级目录存在,不存在创建失败
mkdir():上级目录可以不存在,不存在一同来创建
list():列出下级名称 listFiles():列出下级File对象 listRoots():列出盘符
import java.io.File;
public class TestDir {
public static void main(String[] args) {
File dir = new File("C:/Users/华为/Desktop/dir/test");
//创建目录
boolean flag = dir.mkdir();
System.out.println(flag); //false dir不存在
flag = dir.mkdirs();
System.out.println(flag); //true
File dir2 = new File("C:/Users/华为/Desktop/WL/java/3.L");
//列出下级名称
String[] subNames = dir2.list();
for(String s:subNames) {
System.out.println(s);
}
//下级对象
File[] subFiles = dir2.listFiles();
for(File s:subFiles) {
System.out.println(s.getAbsolutePath());
}
//所有盘符
File[] roots = dir.listRoots();
for(File r:roots) {
System.out.println(r.getAbsolutePath());
}
}
}
打印子孙级
import java.io.File;
public class TestDir2 {
public static void main(String[] args) {
File src = new File("C:/Users/华为/Desktop/WL/java/3.L");
printName(src,0);
}
//打印子孙级目录和文件的名称
public static void printName(File src,int deep) {
//控制前面层次
for(int i=0;i<deep;i++) {
System.out.print("-");
}
//打印名称
System.out.println(src.getName());
if(null==src||!src.exists()) { //递归头
return;
}else if(src.isDirectory()){//目录
for(File s:src.listFiles()) {
printName(s,deep+1); //递归体
}
}
}
}
统计文件夹大小
import java.io.File;
public class TestDir3 {
public static void main(String[] args) {
File src = new File("C:/Users/华为/Desktop/WL/java/3.L");
count(src);
System.out.println(len);
}
private static long len = 0;
public static void count(File src) {
//获取大小
if(null!=src&&src.exists()) {
if(src.isFile()) {//大小
len+=src.length();
}else {//子孙级
for(File s:src.listFiles()) {
count(s);
}
}
}
}
}