标签:文件内容 开发 名称 ati 操作 row 输入输出 oid 获取
至于IO流,也就是输入输出流,从文件出发到文件结束,至始至终都离不开文件,所以IO流还得从文件File类讲起。
1.File概述
怎么理解上面两句话呢?其实很简单!
第一句就是说File跟流无关,File类不能对文件进行读和写也就是输入和输出!
第二句话就是说File主要表示类似D:\文件目录1与D:\文件目录1\文件.txt,前者是文件夹(Director)后者是文件(file),而File类就是操作这两者的类。
2.构造方法
在java中,一切皆是对象,File类也不列外,不论是哪个对象都应该从该对象的构造方法说起,所以在下来分析分析File类的构造方法。首先从API说起
我们主要来学习一下比较常用的三个:
看字描述不够生动、不够形象、不得劲?没关系。下面进行构造方法举例,代码如下:
1. 一个File对象代表硬件中实际存在的一个文件或者目录。
2. File类构造方法不会给你检验这个文件或者文件夹是否真实存在,因此无论该路径下是否存在文件或者目录,都不影响File对象的创建。
//文件路径名
String path = “D:\\123.txt”;
File file1 = new File(path);
//文件路径名
String path2 = "D:\\1\\2.txt";
File file2 = new File(path2); -------------相当于D:\\1\\2.txt
// 通过父路径和子路径字符串
String parent = "F:\\aaa";
String child = "bbb.txt";
File file3 = new File(parent, child); --------相当于F:\\aaa\\bbb.txt
// 通过父级File对象和子路径字符串
File parentDir = new File("F:\\aaa");
String child = "bbb.txt";
File file4 = new File(parentDir, child); --------相当于F:\\aaa\\bbb.txt
3.常用方法
File的常用方法主要分为获取功能、获取绝对路径功能和相对路径、判断功能、创建删除功能的方法
1、public String getAbsolutePath() :返回此File的绝对路径名字符串。
2、public String getPath() :将此File转换为路径名字符串。
3、public String getName() :返回由此File表示的文件或目录的名称。
4、public long length() :返回由此File表示的文件的长度。
以上方法测试,代码如下【注意测试以自己的电脑文件夹为准】:
public class FileGet {
public static void main(String[] args) {
File f = new File("d:/aaa/bbb.java");
System.out.println("文件绝对路径:"+f.getAbsolutePath());
System.out.println("文件构造路径:"+f.getPath());
System.out.println("文件名称:"+f.getName());
System.out.println("文件长度:"+f.length()+"字节");
File f2 = new File("d:/aaa");
System.out.println("目录绝对路径:"+f2.getAbsolutePath());
System.out.println("目录构造路径:"+f2.getPath());
System.out.println("目录名称:"+f2.getName());
System.out.println("目录长度:"+f2.length());
}
}
输出结果:
文件绝对路径:d:\aaa\bbb.java
文件构造路径:d:\aaa\bbb.java
文件名称:bbb.java
文件长度:2116字节
目录绝对路径:d:\aaa
目录构造路径:d:\aaa
目录名称:aaa
目录长度:3236
注意:length(),表示文件的长度。但是File对象表示目录,则返回值未指定。
绝对路径:一个完整的路径,以盘符开头,例如F://aaa.txt。
相对路径:一个简化的路径,不以盘符开头,例如//aaa.txt//b.txt。
1、路径是不区分大小写
2、路径中的文件名称分隔符windows使用反斜杠,反斜杠是转义字符,两个反斜杠代表一个普通的反斜杠
//绝对路径
public class FilePath {
public static void main(String[] args) {
// D盘下的bbb.java文件
File f = new File("D:\\bbb.java");
System.out.println(f.getAbsolutePath());
// 项目下的bbb.java文件
File f2 = new File("bbb.java");
System.out.println(f2.getAbsolutePath());
}
}
输出结果:
D:\bbb.java
D:\java\bbb.java
1、 public boolean exists() :此File表示的文件或目录是否实际存在。
2、 public boolean isDirectory() :此File表示的是否为目录。
3、public boolean isFile() :此File表示的是否为文件。
方法演示,代码如下:
public class FileIs {
public static void main(String[] args) {
File f = new File("d:\\aaa\\bbb.java");
File f2 = new File("d:\\aaa");
// 判断是否存在
System.out.println("d:\\aaa\\bbb.java 是否存在:"+f.exists());
System.out.println("d:\\aaa 是否存在:"+f2.exists());
// 判断是文件还是目录
System.out.println("d:\\aaa 文件?:"+f2.isFile());
System.out.println("d:\\aaa 目录?:"+f2.isDirectory());
}
}
输出结果:
d:\aaa\bbb.java 是否存在:true
d:\aaa 是否存在:true
d:\aaa 文件?:false
d:\aaa 目录?:true
其中,mkdirs()和mkdir()方法类似,但mkdir(),只能创建一级目录,mkdirs()可以创建多级目录比如//a//b//c,所以开发中一般用mkdirs();
这些方法中值得注意的是createNewFile方法以及mkdir与mkdirs的区别这些方法中值得注意的是createNewFile方法以及mkdir与mkdirs的区别
方法测试,代码如下:
public class FileCreateDelete {
public static void main(String[] args) throws IOException {
// 文件的创建
File f = new File("aaa.txt");
System.out.println("是否存在:"+f.exists()); // false
System.out.println("是否创建:"+f.createNewFile()); // true
System.out.println("是否创建:"+f.createNewFile()); // 以及创建过了所以
//再使用createNewFile返回false
System.out.println("是否存在:"+f.exists()); // true
// 目录的创建
File f2= new File("newDir");
System.out.println("是否存在:"+f2.exists());// false
System.out.println("是否创建:"+f2.mkdir()); // true
System.out.println("是否存在:"+f2.exists());// true
// 创建多级目录
File f3= new File("newDira\\newDirb");
System.out.println(f3.mkdir());// false
File f4= new File("newDira\\newDirb");
System.out.println(f4.mkdirs());// true
// 文件的删除
System.out.println(f.delete());// true
// 目录的删除
System.out.println(f2.delete());// true
System.out.println(f4.delete());// false
}
}
注意:delete方法,如果此File表示目录,则目录必须为空才能删除。
4. 目录的遍历
public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
public class FileFor {
public static void main(String[] args) {
File dir = new File("G:\光标");
//获取当前目录下的文件以及文件夹的名称。
String[] names = dir.list();
for(String name : names){
System.out.println(name);
}
//获取当前目录下的文件以及文件夹对象,只要拿到了文件对象,那么就可以获取更多信息
File[] files = dir.listFiles();
for (File file : files) {
System.out.println(file);
}
}
}
listFiles在获取指定目录下的文件或者文件夹时必须满足下面两个条件
1,指定的目录必须存在
2,指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException异常
5 递归遍历文件夹下所有文件以及子文件
不说啥了,直接上代码:
package File;
import java.io.File;
//递归遍历文件夹下所有的文件
public class RecursionDirectory {
public static void main(String[] args) {
File file=new File("D:\\java专属IO测试");
Recursion(file);
}
public static void Recursion(File file){
//1、判断传入的是否是目录
if(!file.isDirectory()){
//不是目录直接退出
return;
}
//已经确保了传入的file是目录
File[] files = file.listFiles();
//遍历files
for (File f: files) {
//如果该目录下文件还是个文件夹就再进行递归遍历其子目录
if(f.isDirectory()){
//递归
Recursion(f);
}else {
//如果该目录下文件是个文件,则打印对应的名字
System.out.println(f.getName());
}
}
}
}
总结
由于io从文件开头,从文件结束,所以有必要对文件进行总结一下,但是JAVA中的文件又只有File类一种,因此花了一部分时间对File类进行归拢整理,希望对大家有所帮助
标签:文件内容 开发 名称 ati 操作 row 输入输出 oid 获取
原文地址:https://blog.51cto.com/14954398/2567053