一、 流:
在程序开发过程中,将不同输入、输出设备(如文件、网络、压缩包等)之间的数据传输抽象为流。
Java的IO支持通过java.io包下的类和接口支持,在java.io包下主要包括输入、输出两种IO流,每种输入、输出流又可分为字节流和字符流两大类。其中字节类以字节为单位来处理输入、输出操作,而字符串流则以字符来处理输入、输出操作。
流的概念和分类
流是程序中流淌的血液,数据的传输都是通过两种类型的流:输入流和输出流,这就是IO。需要读入数据使用输入流,需要写入数据使用输出流;
按照操作的数据类型分类:字节流和字符流
字节流可以读取和写入任何数据,因为任何数据最终都能以字节存储;
字符流只能操作文本类型的文件,按照字符进行读取和写入,方便对字符的操作
常用的一些字节流子类:
文件输入输出流:FileInputStream、FileOutputStream
对象输入输出流:ObjectInputStream、ObjectOutputStream
常用的一些字符流子类:
文件输入输出流:FileReader 、FileWriter
缓存的文件输入输出流:BufferedReader 、BufferedWriter
字节流和字符流用法几乎一样,区别在于操作的数据单元不同:
字节流操作的最小数据单元是8位的字节(主要由InputStream和OutputStream作为基类)
字符流操作的最小数据单元是16位的字符(主要由Reader和Writer作为基类)
二、File类
File类是java.io包中唯一代表磁盘文件本身的对象。File类定义了一些与平台无关的方法来操作文件,可以通过调用File类中的方法,实现创建、删除、重命名文件等操作。File类对象主要用来获取文件本身的一些信息,如文件所在目录、文件长度、文件读写权限等。
注意:File不能访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流。
1.三种构造方法创建文件对象
(1). File(String path)
该构造方法通过将给定路径名字符串转化为抽象路径名来创建一个新File实例。
语法如下:new File(String path) 其中 path 指路径名称包含文件名 例如: File file = new File("E:\\test.txt");
(2). File(String parent,String child)
该构造方法根据定义的父路径和子路径字符串,创建一个新的File对象。
语法如下:new File(String parent,String child)
parent: 父路径字符串 例如 D:/ 或 D:/doc/
child:子路径字符串。例如:test.txt
(3).File(File f,String child)
该构造方法根据parent抽象路径和child路径名字符串创建一个新File实例。
语法如下: new File(File f,String child)
parent: 父路径对象 例如 D:/doc/
child:子路径字符串。例如:test.txt
2.文件操作
常见的文件操作主要有判断文件是否存在、创建文件、重命名文件、删除文件以及获取文件的基本信息(例如文件名称、大小、修改时间、是否隐藏)等。
package com.aiit.book.file;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FileTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("E:/test.txt"); //创建文件对象
if(!file.exists()) {//如果文件不存在,创建对象
System.out.println("文件不存在");
String fileName = file.getName();//获取文件名
System.out.println("文件名"+fileName);
try {
file.createNewFile();//创建文件
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//
}else {
System.out.println("文件存在");
if(file.isFile()&&file.canRead()) { //该文件是一个标准文件且可读
System.out.println("该文件可读!正在读取文件信息");
File parent = file.getParentFile();//获取文件目录
String fileName = file.getName();//获取文件名
String filePath = file.getPath();//获取该文件的绝对路径
boolean hidden = file.isHidden();//获得该文件是否被隐藏
long len = file.length();//获取该文件的字节数
long tempTime = file.lastModified();//获取该文件最后修改时间
Date date = new Date(tempTime);
SimpleDateFormat sdf = new SimpleDateFormat("yyy/MM/dd HH:mm:ss");
String time = sdf.format(date);
System.out.println("文件目录"+parent);
System.out.println("文件名"+fileName);
System.out.println("文件的绝对路径"+filePath);
System.out.println("该文件是否被隐藏"+hidden);
System.out.println("文件的字节数"+len);
System.out.println("文件最后修改时间"+tempTime);
System.out.println("文件时间"+time);
file.delete();//删除文件
}else{
System.out.println("文件不可读");
}
}
}
}
运行程序,第一次执行,首先创建文件,在E盘能找到,控制台输出信息:
第二次运行程序,获取文件信息,并删除文件,控制台输出信息:
注意:在创建File对象时,如果直接写文件名,则创建的文件位于项目文件夹下。
3.文件夹操作
常见的文件夹操作主要有判断文件夹是否存在、创建文件夹、删除文件夹、获取文件夹中包含的子文件夹及文件等。
package com.aiit.book.file;
import java.io.File;
public class FolderTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
String path = "E:\\erweima"; //声明文件夹erweima所在的目录
for(int i = 1;i<=10;i++) {
File folder = new File(path+"\\"+i);
if(!folder.exists()) {//文件夹不存 在
folder.mkdir();//创建新的文件夹
}
System.out.println("文件夹创建成功");
File file = new File("E:\\");
File[] files = file.listFiles();//获得C盘的所有文件和文件夹
for (File file2 : files) {
if(file2.isFile()) {//判断是否是文件
System.out.println(file2.getName()+"文件");
}else if(file2.isDirectory()){//判断是否是文件夹
System.out.println(file2.getName()+"文件夹");
}
}
}
}
}
运行结果: