Java IO操作——文件操作类File的使用

 学习目标

掌握File类的使用
可以使用File类中的方法对文件进行操作。

在整个Java的学习中,个人感觉学习较为困难的地方就是IO,因为整个IO是非常庞大的,而且有很多操作的类。每个类都有各自的特点。如果面向对象各个概念都非常清楚的话,则学习此块知识会比较容易些。
  所有的IO操作都保存在java.io包中。

File类

在整个io包中,唯一表示与文件本身有关的类就是File类。使用File类可以进行创建或删除文件以及文件夹等常用操作。要想使用File类,则首先要观察File类的构造方法,此类的常用构造方法如下所示:
public File(String pathname):实例化File类的时候,必须设置好路径。直接根据路径找到文件。
File类中的主要方法和常量:
1、public static final String pathSeparator 常量 表示路径的分隔符(windows是:";")
2、public static final String separator       常量  表示路径的分隔符(windows是:"\")
3、public File(String pathname)  构造方法 创建File类对象,传入完整路径
4、public boolean createNewFile() throws IOException  普通方法  创建新文件
5、public boolean delete()  普通方法 删除文件
6、public boolean exists()   普通方法 判断文件是否存在
7、public boolean isDirectory() 判断给定的路径是否是一个目录
8、public long length()   普通方法  返回文件的大小
9、public String[] list() 普通方法 列出指定目录的全部内容,只是列出了名称
10、public File[] listFiles() 普通方法 列出指定目录的全部内容,会列出路径
11、public boolean mkdir() 普通方法 创建一个目录
12、public boolean removeTo(File dest)为已有的文件重命名

创建一个新文件

创建文件:public boolean createNewFile() throws IOException
使用以上的方法就可以创建文件了
假设:现在要在d盘创建一个test.txt的文件。
import java.io.File ;
import java.io.IOException ;
public class FileDemo01{
	public static void main(String args[]){
		File f = new File("d:\\test.txt") ;		// 实例化File类的对象
		try{
			f.createNewFile() ;		// 创建文件,根据给定的路径创建
		}catch(IOException e){
			e.printStackTrace() ;	// 输出异常信息
		}
	}
};
以上已经完成了文件的创建功能,但是如果开发的时候按照以上的格式编写,则肯定会出错误。
因为在各个操作系统中,实际上路径的分隔符是不一样的,例如:
windows中使用反斜杠:"\"
Linux中使用正斜杠:"/"
如果想让Java程序的可移植性继续保持,则最好根据所在的操作系统来自动使用分隔符。
如下所示:
import java.io.File ;
import java.io.IOException ;
public class FileDemo02{
	public static void main(String args[]){
		System.out.println("pathSeparator:" + File.pathSeparator) ;	// 调用静态常量
		System.out.println("separator:" + File.separator) ;	// 调用静态常量
	}
};
如果要想让Java程序继续保持可移植性,那么在编写路径的时候就应该使用File类中的常量,修改之前的程序如下所示:
import java.io.File ;
import java.io.IOException ;
public class FileDemo03{
	public static void main(String args[]){
		File f = new File("d:"+File.separator+"test.txt") ;		// 实例化File类的对象
		try{
			f.createNewFile() ;		// 创建文件,根据给定的路径创建
		}catch(IOException e){
			e.printStackTrace() ;	// 输出异常信息
		}
	}
};

删除一个指定的文件

在File类中使用以下方法就可以删除文件:
public boolean delete()  
将之前建立好的文件删除掉:
import java.io.File ;
import java.io.IOException ;
public class FileDemo04{
	public static void main(String args[]){
		File f = new File("d:"+File.separator+"test.txt") ;		// 实例化File类的对象
		f.delete() ;	// 删除文件
	}
};
此时,文件确实被删除掉了,但是最好的做法不能直接删除而是在删除文件前判断一下文件是否存在,如果存在再执行删除操作。
在File类中可以使用exists()方法判断一个文件是否存在。
public boolean exists()
使用以上的代码增强之前的程序。代码如下:
import java.io.File ;
import java.io.IOException ;
public class FileDemo05{
	public static void main(String args[]){
		File f = new File("d:"+File.separator+"test.txt") ;		// 实例化File类的对象
		if(f.exists()){	// 如果文件存在则删除
			f.delete() ;	// 删除文件
		}
	}
};

综合创建、删除文件的操作

 假如现在有如下要求:
  给定一个路径,如果此文件存在,则删除,如果文件不存在,则创建一个新的文件
程序代码如下:
import java.io.File ;
import java.io.IOException ;
public class FileDemo06{
	public static void main(String args[]){
		File f = new File("d:"+File.separator+"test.txt") ;		// 实例化File类的对象
		if(f.exists()){	// 如果文件存在则删除
			f.delete() ;	// 删除文件
		}else{
			try{
				f.createNewFile() ;		// 创建文件,根据给定的路径创建
			}catch(IOException e){
				e.printStackTrace() ;	// 输出异常信息
			}
		}
	}
};
从程序的运行结果中可以发现,所有的操作并不会立即执行。因为JAVA是通过JVM与底层进行交互的,所以所有的操作需要经过JVM完成,那么就有可能产生延迟。
提示:对于文件的后缀是可有可无的。

创建一个文件夹

使用mkdir()方法创建一个文件夹。
public boolean mkdir() 
创建文件夹操作,实例代码如下:
import java.io.File ;
import java.io.IOException ;
public class FileDemo07{
	public static void main(String args[]){
		File f = new File("d:"+File.separator+"mldn") ;		// 实例化File类的对象
		f.mkdir() ;	// 创建文件夹
	}
};

列出指定目录的全部文件

如果现在给出了一个目录,则可以直接列出目录中的内容。但是列出的方法在File类中存在两个。
 以字符串数组的形式返回:public String[] list()
 以File数组的形式返回:public File[] listFiles()
操作一:使用list()列出全部内容
程序代码如下:
import java.io.File ;
import java.io.IOException ;
public class FileDemo08{
	public static void main(String args[]){
		File f = new File("d:"+File.separator) ;		// 实例化File类的对象
		String str[] = f.list() ;	// 列出给定目录中的内容
		for(int i=0;i<str.length;i++){
			System.out.println(str[i]) ;
		}
	}
};

以上只是列出了全部的名字,包括文件夹的名字或是文件的名字等
操作二:使用listFiles()列出
程序代码如下:
import java.io.File ;
import java.io.IOException ;
public class FileDemo09{
	public static void main(String args[]){
		File f = new File("d:"+File.separator) ;		// 实例化File类的对象
		File files[] = f.listFiles() ;	// 列出全部内容
		for(int i=0;i<files.length;i++){
			System.out.println(files[i]) ;
		}
	}
};

判断一个给定的路径是否是目录

在File类中直接使用:public boolean isDirectory()
给定路径,判断是否是目录
程序代码如下:
import java.io.File ;
import java.io.IOException ;
public class FileDemo10{
	public static void main(String args[]){
		File f = new File("d:"+File.separator) ;		// 实例化File类的对象
		if(f.isDirectory()){	// 判断是否是目录
			System.out.println(f.getPath() + "路径是目录。") ;
		}else{
			System.out.println(f.getPath() + "路径不是目录。") ;
		}
	}
};

要求:列出指定目录中的全部内容

如果给定了一个目录,则要求将此目录中的全部文件都列出来,但是列的时候还会存在子文件夹。
分析如下:

应该采用递归的调用形式:
import java.io.File ;
import java.io.IOException ;
public class FileDemo11{
	public static void main(String args[]){
		File my = new File("d:" + File.separator) ;	// 操作路径
		print(my) ;
	}
	public static void print(File file){	// 递归调用
		if(file!=null){	// 判断对象是否为空
			if(file.isDirectory()){	// 如果是目录
				File f[] = file.listFiles() ;	// 列出全部的文件
				if(f!=null){	// 判断此目录能否列出
					for(int i=0;i<f.length;i++){
						print(f[i]) ;	// 因为给的路径有可能是目录,所以,继续判断
					}
				}
			}else{
				System.out.println(file) ;	// 输出路径
			}
		}
	}
};


总结:
1、File类是在java.io包中唯一与文件本身有关的。
2、可以使用File类创建、删除等常见的文件操作。
3、在使用File类指定路径的时候一定要注意操作系统之间的差别,尽量使用separator进行分割。










评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值