IO流(一)
首先IO流是什么:
首先流是什么:流是指一连串流动的字符,字符从硬盘到内存或者从内存到硬盘传输形态
I:In – 输入
O:Out – 输出
IO流是站在程序(内存)的角度来判别的,并不是站在文件(硬盘)的角度判别的
流的常见分类
按照方向区分流:
- 输入流:InputStream和Reader为基类
- 输出流:OutputStream和Writer为基类
按照单位区分流:
- 字节流:
① 字节输入流:InputStream基类
② 字节输出流:OutputStream基类 - 字符流:
① 字符输入流:Reader基类
② 字符输出流:Writer基类 - 两者的区别:
① 字节流的单位是字节,而字符流的单位是字符
② 字节流能处理所有类型的数据(如图片、avi等),但是字符流只能处理字符类型的数据
按照功能区分流:
- 基础流:
- 处理流:
IO流的相对路径与绝对路径
相对路径:
public static void main(String[] args) {
File file = new File("修改");
System.out.println(file.getAbsolutePath());
}
//输出的结果为:D:\Web\My\修改
绝对路径:
public static void main(String[] args) {
File file = new File("D:\\软件备份\\修改");
System.out.println(file);
}
//输出结果:D:\软件备份\修改
两者的区别:相对路径是相对于程序的工作空间而言,绝对路径是直接指向硬盘地址
解释:如果读取的文件是在绝对路径中,那么其他得到该段代码的人有可能就访问不到该文件,但是用相对路径则解决了这个问题的出现
IO流的基础用法
获取文件信息:
public static void main(String[] args) {
File file = new File("D:\\软件备份\\修改\\01.jpg");
//获取数据
System.out.println("获取绝对路径:" + file.getAbsolutePath());
System.out.println("获取文件名:" + file.getName());
System.out.println("获取文件是否可读:" + file.canRead());
System.out.println("获取文件是否可写:" + file.canWrite());
System.out.println("获取文件是否隐藏:" + file.isHidden());
System.out.println("获取文件大小:" + file.length());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
String format = sdf.format(file.lastModified());
System.out.println("获取文件最后修改时间:" + format);
}
程序向硬盘中写入文件时:
① 当文件直接在根目录下:
public static void main(String[] args) {
File file = new File("test.txt");
if(!file.exists()) { //判断相对路径下是否有该文件
try {
file.createNewFile(); //如果没有则执行创建文件的代码
} catch (IOException e) {
e.printStackTrace();
}
}
}
② 当将内容写入某个(多个)文件夹下:
public static void main(String[] args) {
File file = new File("file\\test.txt");
//获取该文件的父类
File parentFile = file.getParentFile();
if(!parentFile.exists()) {
parentFile.mkdirs();
}
if(!file.exists()) { //判断是否有该文件
try {
file.createNewFile(); //如果没有则创建文件
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注:mkdirs()
和mkdir()
的区别:前者可以创建多个子文件夹,后者只能创建一个文件夹,通常在项目中我们不知道文件存储在几级文件夹下,所以通常使用mkdirs()
这个
但是如果在读取的时候发现路径中不存在要读取文件的时候,则会报错
获取某个文件夹下所有的文件(名):
public static void main(String[] args) {
File file = new File("C:\\Users\\32060\\Desktop");
String[] list = file.list();//用数组存放获取到的文件
for (String str : list) { //用遍历输出数组中的内容
System.out.println(str);
}
}
获取某个文件夹下所有文件指定信息(全部信息):
public static void main(String[] args) {
File file = new File("C:\\Users\\32060\\Desktop");
File[] list = file.listFiles();
for (File f : list) {
System.out.println(f.getName() + "---" + f.length());//获取文件名和文件长度
}
}
获取某个文件夹下所有包含指定内容的文件:
public static void main(String[] args) {
File file = new File("C:\\Users\\32060\\Desktop");
File[] list = file.listFiles();
for (File f : list) {
if(f.getName().endsWith(".txt") && f.isFile()) { //判断文件名是.txt并且不是文件夹的文件
System.out.println(f.getName()+ "--" + f.length());
}
}
}
此处判断方法是.endsWith()
而不是.equals()
方法
注:微末见解,尚在进步,如有不对,还望指出