IO流与File对象基本操作

一、IO流

1、IO流中的基本概念

IO流:用来处理设备之间的数据传输。 设备:各种存储设备

IO:用于处理设备上的数据的技术。设备:内存、硬盘、光盘等

流:系统资源,window系统本身就可以操作这些设备,各种语言只是使用系统平台上的这个资源。

并对外提供了各种语言自己的操作功能,这些功能最终调用的是系统资源。

流使用完一定要释放!

流的分类:

字节流与字符流 操作的数据

输入流与输出流 流的方向

     输入输出相对于内存来讲

输入(input):外围设备---->内存

输出(output):内存------>外围设备

     java语言中用于操作流的对象的包是java.io


二、File

java中描述文件或文件夹的类是File类

1、构造方法

(1),File(String pathname) 将一个具体的路径封装成File对象,可以封装存在的文件或目录,也可以封装不存在的文件和目录。

File f = new File("c:\\dev\\word.txt"); 封装的是word.txt这个文件

(2),File(String parent,String child) 文件目录和文件分别作为参数传递

(3),File(File parent,String child) 文件目录封装成对象,作为参数传递,child路径名字符串形式传递。

  2、文件分隔符

不同的操作系统下的分隔符不同,为了使程序移植性更好,有时需要获取当前系统中的分隔符。

static String separator:与系统有关的默认名称分隔符。使用系统属性的file.separator来获取值。

static String pathSeparator:与系统有关的路径分隔符,为了方便,它被表示为一个字符串。

System.getProperty("file.separator");


  3、File类中常用方法

(1)、获取封装对象的名称

getName() File file = new File("c:\\1.txt"); file.getName();   获取的是1.txt 

  (2),获取文件的大小

length() 单位:字节 返回值类型:long

(3),获取文件所有目录

getParent() 返回值类型:String

返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。

File file = new File("c:\\abc\\1.txt"); file.getName();   获取的是c:\abc 封装的是1.txt    c:\\abc是目录

(4),获取文件路径

String getAbsolutePath(); //获取文件对象的绝对路径,即使封装的是相对的,获取到的也是绝对的路径。
File getAbsoluteFile() //此抽象路径名表示相同的文件或目录 
String getPath(); //获取的是file对象中的封装的路径,封装的是什么,获取到的就是什么。

(5),获取文件最后一次被修改的时间

long lastModified(); 返回与时间点(1970 年 1 月 1 日,00:00:00 GMT)之间的毫秒数

(6)、文件是否是隐藏的

boolean isHidden(); 隐藏返回true

(7),创建文件

boolean createNewFile(); 如果文件存在,则不创建返回false,不存在就创建,成功返回true

(8),删除文件或文件夹

boolean delete(); 删除后不放入回收站。文件存在就删除,成功删除返回true,文件不存在,则返回false
删除文件夹时,必须保证该文件夹没有内容,有内容,必须先把内容删除后,才可以删除当前文件夹

(9),判断文件是否存在。

boolean exists(); 测试此抽象路径名表示的文件或目录是否存在。封装的File对象是否存在

(10),创建文件夹

boolean mkdir() 创建目录 创建此抽象路径名指定的目录
boolean mkdirs() 创建多级目录 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。

(11),空间大小

long getFreeSpace() 空闲大小
long getTotalSpace() 总大小
long getUsableSpace() 分区上的可用字节数

4、获取目录下的文件

(1)、只获取文件名称

File dir = new File("c:\\");
String[] names = dir.list(); 列出当前目录下的所有文件和文件夹名称,包括隐藏文件
如果目录不存在,报空指针异常
如果目录存在,但目录中没有内容。返回长度为0的数组。

(2)、获取文件或目录对象

File[] files = dir.listFiles(); 抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录


5、过滤器,用来筛选文件或文件夹

(1),文件名过滤器   FilenameFilter 接口,将过滤的条件和容器进行分离。进行解藕

1,创建一个过滤器对象

public class FilterBySuffix implements FilenameFilter{
			    private String suffix;
			    public FilterBySuffix(String suffix){
				super();
				this.suffix = suffix;
			    }

			    @Override
			    public boolean accept(File dir,String name){
				return name.endsWith(suffix);
			    }
			}


2,传入一个过滤器
dir.list(new FilterBySuffix(""));


获取指定目录下的特定类型的文件
File dir = new File("c:\\");
String[] names = dir.list();
for(String name : names){
   if(name.endsWith(".java")){

   }
}

2),文件过滤器 FileFilter

File[] listFiles() 目录中的所有文件和目录

File[] listFiles(FileFilter filter) 满足过滤器的文件和目录

//1,自定义过滤器

public class FilterByFile implements FileFilter{
	    				@Override
	    				public boolean accept(File pathname){
						return pathname.isFile();
	  				 }
				}

//2,获取

FileFilter filter = new FilterByFile();
File[] files = dir.listFiles(filter);


应用:获取子目录中的内容

需求:遍历指定目录下的内容(包含子目录中的内容)

public static void getAllFiles(File dir){
	    //1,获取该目录的文件对象数组			文件对象
	    File[] files = dir.listFiles();
	    //2,对数组进行遍历
	    for(File file : files){
		if(file.isDirectory()){
		    getAllFiles(file);			递归调用
		}else{
			
		}
	    }
	}

6,递归

递归:函数自身调用自身。函数内部又使用到了该函数的功能

使用场景:当功能被重复使用,但是每次该功能使用参与运算的数据不同时,可以考虑使用递归方式解决

注意:
使用递归时一定要定义条件
递归次数过多,会出现栈内存溢出(java.lang.StackOverflowError)


public static int getSum(int num){
<span style="white-space:pre">	</span>    if(num==1){
<span style="white-space:pre">		</span>return 1;
<span style="white-space:pre">	</span>    }else{
<span style="white-space:pre">		</span>return num + getSum(num-1);
<span style="white-space:pre">	</span>    }
<span style="white-space:pre">	</span>}
}

7、删除目录

public static void deleteDir(File dir){
	    //1,列出当前目录下所有的文件和文件夹
	    File[] files = dir.listFiles();
	    //2,对该数组进行遍历
	    for(File file : files){
		//3,判断是否有目录,如果有,继续调用该功能遍历,递归,如果不是文件夹,直接删除
		if(file.isDierectory){
		    deleteDir(file);
		}else{
		    file.delete();
		}
	    }
	    dir.delete();
		
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值