File文件的基本操作

一、File类简介
File类不但代表文件和目录的双重含义,还表示一个刚新建于内存中尚未同步去硬盘的文件或目录。File类的作用描述了文件本身的属性,包括用来获取或处理与磁盘文件相关的信息,例如大小、权限、生成时间、最后修改时间和目录路径等等。此外,浏览子目录层次结构也是经常做的操作。尽管File类的实例对象并不打开文件,也不提供任何文件内容的处理功能。但是其他java.io包中的类通常都需要使用File对象来指定要操作的文件或目录。

二、注意问题
由于File需要和操作系统的文件打交道,而Window和Linux的文件系统差异性比较大,所以我们首先要先讲解一下两个注意问题:
1、分割符
Unix/Linux在路径名中分隔符是下斜杠“/”(位于键盘的下端),比如:

/usr/java/jdk7/bin/java.bin

在Windows系统中沿用Dos系统使用的路径分隔符上斜杠“\”(位于键盘的上端)。不过Java编程时很快就会发现这样定义字符串路径是行不通的:

String path=”C:\java\jdk\bin\java.exe”; //报错

上斜杠“\”在java中是转移字符的开始标记,因此你需要进行必要的转义操作:

String path=”C:\java\jdk\bin\java.exe”; //正确

对于上面问题还有很多解决方法,可以统一使用Java约定是用UNIX和URL风格的斜线来作路径分隔符,这样的写法经过测试,在window下面也是可以正常运行的:

String path=”C:/java/jdk/bin/java.exe”; //正确

File类还提供了一个属性File.separator代替分隔符,这个也可以解决问题。

2、相对路径和绝对路径

绝对路径:是window系统中指的是从盘符开始的路径,linux系统中指的是以"/"开头——代表根目录的路。

像一下这些路径就是绝对路径

C:\java\jdk\bin\java.exe

/usr/hello.java

相对路径,顾名思义,相对路径就是相对于当前文件的路径。相对路径的真实路径要根据当前所在目录决定的,如:当前所在的路径是c:/java,那么路径hello/abc.txt路径就表示在c:/java/hello/abc.txt。相比绝对路径而言,相对路径灵活而且效率更高。相对路径还有两个特殊符号:

“./”:代表目前所在的目录。

“…/”:代表上一层目录。

三、代码示例
1.构造方法,只需要写上路径,既可以指向文件也可以指向目录。代码如下:

//目录
File path=new File("g:\\java\\abc\\cbd");
//文件
File file=new File("g:\\java\\hello.java");

2.建立目录和文件,建立目录和创建文件使用方法是不同的,其中建立目录方法有两个:mkdirs和mkdir。mkdir要求父级目录必须存在,否则会建立失败,而mkdirs会建立所有的目录。不管是建立文件还是目录最好都先判断是否有其权限,还得判断原文件是否存在,否则会覆盖原文件。代码如下:

//新建目录和新建文件方法
//System.out.println(path.exists());
if(!path.exists()){
	//mk make dir
	if(path.mkdirs()){
		System.out.println("建立成功");
	}else{
		System.out.println("建立失败");
	}
}

//新建文件
if(!file.exists()){
	try{
		file.createNewFile();
	}catch(IOException){
		e.printStackTrace();
	}
}

**3、其他操作。**我们可以通过File类读取文件的基本属性,还可以删除文件,重命名文件等操作。具体大家可以运行下面代码:

System.out.println("是否可读"+file.canRead());
System.out.println("是否可写:"+file.canWrite());
System.out.println("是否可执行:"+file.canExecute());
		
System.out.println("是否是目录:"+path.isDirectory());
System.out.println("是否是文件:"+path.isFile());
		
System.out.println("是否隐藏:"+file.isHidden());
		
System.out.println("删除文件:"+file.delete());
		
System.out.println("删除目录:"+path.delete());
		
System.out.println("获得文件的完整路径:"+file.getAbsolutePath());
		
file.renameTo(new File("d://abc.txt"));
		
//浏览目录
File javaFile=new File("g://java");
		
File files[]= javaFile.listFiles();
System.out.println("文件名称\t修改时间\t类型\t大小");
for(int i=0;i<files.length;i++){
	File f=files[i];
			
	Date date=new Date(f.lastModified());
	SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
			
	String ftype=f.isDirectory()?"目录":"文件";
			
	System.out.println(f.getName()+"\t"+sdf.format(date)+
		"\t"+ftype+"\t"+f.length());
			
}

四、实例
把目录hello下所有文件后缀名是txt的文件全部删除。 提示可以使用递归,实现代码如下:

public class Exe6{
	public static void main(String []args){
		Exe6 exe6=new Exe6();
		exe6.deleteFile("e:\\hello");
	}

	public void deleteFile(String path){
		File file=new File(path);
		File[] files=file.listFiles();
		for(int i=0;i<files.length();i++){
			File temp=files[i];
			//如果是文件才判定是否要删除
			if(temp.isFile()){
				//文件后缀名是txt
				if(temp.getName().endsWith("txt")){
					System.out.println(temp.getName()+temp.delete());
				}
			}else{
				//目录,再进入目录删除
				//get the path
				String son=path+"\\"+temp.getName();
				//递归调用
				deleteFile(son);
			}
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值