您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
【第12章:JAVA IO】_File类
发布时间:2020-12-26 18:39:30编辑:雪饮阅读()
创建一个文件
import java.io.File;
import java.io.IOException;
public class TestJava{
public static void main(String args[]){
File f=new File("d:\\20201226.txt");
try{
f.createNewFile();
}
catch(IOException e){
e.printStackTrace();
}
}
}
注意:因为反斜杠默认会被认定为转义字符,所以我们要用两个反斜杠
File.pathSeparator与File.separator
这两个常量分别表示分隔符和定界符
特别是后者作用比较大,在不同操作系统中可能呈现不同
我们先看看这两个常量的输出:
import java.io.File;
public class TestJava{
public static void main(String args[]){
System.out.println("pathSeparator:"+File.pathSeparator);
System.out.println("separator:"+File.separator);
}
}
D:\>javac TestJava.java
D:\>java TestJava
pathSeparator:;
separator:\
所以为了方便文件路径拼接于是一般不会向上面程序那样定义文件路径。
而是像下面这样:
import java.io.File;
import java.io.IOException;
public class TestJava{
public static void main(String args[]){
File f=new File("d:"+File.separator+"20201227.txt");
try{
f.createNewFile();
}
catch(IOException e){
e.printStackTrace();
}
}
}
D:\>javac TestJava.java
D:\>java TestJava
File对象还提供一个delete方法用于删除一个文件
import java.io.File;
public class TestJava{
public static void main(String args[]){
new File("d:"+File.separator+"20201227.txt").delete();
}
}
D:\>javac TestJava.java
D:\>java TestJava
File对象提供一个exists方法用于判断一个文件是否存在
import java.io.File;
public class TestJava{
public static void main(String args[]){
File f=new File("d:"+File.separator+"20201226.txt");
if(f.exists()){
f.delete();
}
}
}
D:\>javac TestJava.java
D:\>java TestJava
File类提供mkdir用于创建一个目录
import java.io.File;
public class TestJava{
public static void main(String args[]){
new File("d:"+File.separator+"20201226").mkdir();
}
}
D:\>javac TestJava.java
D:\>java TestJava
File类提供list用于列出一个目录中的文件(目录)列表
import java.io.File;
public class TestJava{
public static void main(String args[]){
for(String x:new File("d:"+File.separator).list()){
System.out.println(x);
}
}
}
D:\>javac TestJava.java
D:\>java TestJava
$RECYCLE.BIN
2008x64r2
20201226
2345Downloads
46132_20161202105114
46132_20161202105114.rar
A.class
B.class
B1.java
B2.java
BaiduNetdiskDownload
Book.class
cent7(test)x64
centos64
centos7(test2)x64
centos8
Demo.class
Download
File类提供listFiles方法用于列出一个目录中的文件(目录)列表(完整路径)
import java.io.File;
public class TestJava{
public static void main(String args[]){
for(File x:new File("d:"+File.separator).listFiles()){
System.out.println(x);
}
}
}
D:\>javac TestJava.java
D:\>java TestJava
d:\$RECYCLE.BIN
d:\2008x64r2
d:\20201226
d:\2345Downloads
d:\46132_20161202105114
d:\46132_20161202105114.rar
d:\A.class
d:\B.class
d:\B1.java
d:\B2.java
d:\BaiduNetdiskDownload
d:\Book.class
d:\cent7(test)x64
d:\centos64
d:\centos7(test2)x64
d:\centos8
d:\Demo.class
d:\Download
File类提供isDirectory方法用于判断一个File实例是否是目录,另外File类提供getPath用于获取一个File实例的路径信息。
import java.io.File;
public class TestJava{
public static void main(String args[]){
File f=new File("d:"+File.separator);
if(f.isDirectory()){
System.out.println(f.getPath()+"路径是目录");
}
else{
System.out.println(f.getPath()+"路径不是目录");
}
}
}
D:\>javac TestJava.java
D:\>java TestJava
d:\路径是目录
综合演练
经过上面的学习我们大概了解了File的一系列操作,那么接下来我们来综合演练一下,我们定一个目标,就是提供一个方法该方法接收一个File对象如果该对象是目录则遍历该目录,若包含子目录则递归遍历,并且我们该方法还接收第二个参数limit,用来限制遍历总条数。那么实现大致如:
import java.io.File;
public class TestJava{
private static int num=0;
public static void main(String args[]){
File dir=new File("d:"+File.separator);
dirPrint(dir,10);
}
public static void dirPrint(File file,int limit){
if(num<=limit && limit>0){
//判断文件是否可见或者压根就是null(系统中某些文件由于权限等问题可以导致java没有办法“可见”)
if(file!=null){
if(file.isDirectory()){
File f[]=file.listFiles();
//同样是为了判断系统不可见权限的文件,否则可能会抛出异常
if(f!=null){
for(File x:f){
dirPrint(x,limit);
}
}
}
else{
num++;
System.out.println(file);
}
}
}
}
}
D:\>javac TestJava.java
D:\>java TestJava
d:\$RECYCLE.BIN\S-1-5-21-3812992817-1793531479-1532239035-1001\$IC7POEU
d:\$RECYCLE.BIN\S-1-5-21-3812992817-1793531479-1532239035-1001\$IJUWRPB
d:\$RECYCLE.BIN\S-1-5-21-3812992817-1793531479-1532239035-1001\$IN82NFG.exe
d:\$RECYCLE.BIN\S-1-5-21-3812992817-1793531479-1532239035-1001\$IV0H9AR.mp4
d:\$RECYCLE.BIN\S-1-5-21-3812992817-1793531479-1532239035-1001\desktop.ini
d:\2008x64r2\caches\GuestAppsCache\appData\001d485bebe8224c5d1bd9a809b59892.appicon
d:\2008x64r2\caches\GuestAppsCache\appData\001d485bebe8224c5d1bd9a809b59892.appinfo
d:\2008x64r2\caches\GuestAppsCache\appData\0244a709f0a6a5ee01249dd4b2b5909f.appicon
d:\2008x64r2\caches\GuestAppsCache\appData\0244a709f0a6a5ee01249dd4b2b5909f.appinfo
d:\2008x64r2\caches\GuestAppsCache\appData\03a8b5472495ab296cbc009bb3be2d5f.appicon
d:\2008x64r2\caches\GuestAppsCache\appData\03a8b5472495ab296cbc009bb3be2d5f.appinfo
这里真的是要吐槽下java方法里面不能设定静态变量的这个坑,咱们php都是可以的,我感觉在这一块儿,php还是比java骄傲的。那么大家一般在这种情况下也是和我一样在类全局中定义吗?还是说有更好更优雅的实现方式?我能想到的就是内部类的实现方式,不过就只是这么一个方法的实现还要用到内部类会不会有点小题大做?欢迎大家在下面留言讨论。
关键字词:java,File