JavaSe基础XX18——IO流_4

本文详细介绍了Java中File对象的使用,包括构造函数、获取文件属性、创建与删除文件、判断文件存在、重命名文件、获取系统根目录和容量、过滤目录内容以及深度遍历文件夹的实践。内容涵盖了File对象的各种常见功能,帮助读者深入理解Java的文件操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*31-IO流(File对象-构造函数&字段)





IO流只能操作设备上的数据,无法操作文件系统和文件夹。

比如文件的属性,创建时间、修改时间等等。

不能通过IO流获取属性。




//可以将一个已存在的,或者不存在的文件或者目录封装成file对象。
File f1 = new File("c:\\a.txt");


File f2 = new File("c:\\","a.txt");

File f = new File("c:\\");

File f3 = new File(f,"a.txt");




File f4 = new File("c:"+File.separator+"abc"+File.separator+"a.txt");
File f4 = new File("c:\\abc\\a.txt");
System.out.println(f4);




*32-IO流(File对象-常见功能-获取)

/*
* File对象的常见方法。

* 1,获取。
* 1.1 获取文件名称。
* 1.2 获取文件路径。
* 1.3 获取文件大小。
* 1.4 获取文件修改时间。


*33-IO流(File对象-常见功能-创建和删除)

* 2,创建与删除。

返回值:boolean


// 文件的创建和删除。
// File file = new File("file.txt");

/*
* 和输出流不一样,如果文件不存在,则创建,如果文件存在,则不创建。 

*/
// boolean b = file.createNewFile();
// System.out.println("b="+b);



// boolean b = file.delete();
// System.out.println("b="+b);


File dir = new File("abc\\q\\e\\c\\z\\r\\w\\y\\f\\e\\g\\s");

// boolean b = dir.mkdir();//make directory
// System.out.println("b="+b);
// dir.mkdirs();//创建多级目录


创建目录和创建文件不一样。创建文件:当有文件存在,会覆盖。

创建目录:文件存在,就不会被覆盖。



无法删除sbc目录



*34-IO流(File对象-常见功能-判断)

创建文件前,我们都会先判断该文件是不是存在。






delete也没法删除正在IO读写的文件。





一定要记住,要先判断是不是存在!







*35-IO流(File对象-常见功能-重命名)













*36-IO流(File对象-常见功能-系统根目录和容量获取)





---------------------小结-------------------------

package cn.itcast.io.p2.file.demo;

import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Date;

public class FileMethodDemo {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {

		
		/*
		 * File对象的常见方法。
		 * 
		 * 1,获取。
		 * 		1.1 获取文件名称。
		 * 		1.2 获取文件路径。
		 * 		1.3 获取文件大小。
		 * 		1.4 获取文件修改时间。
		 * 
		 * 2,创建与删除。
		 * 		
		 * 3,判断。
		 * 
		 * 4, 重命名
		 * 		
		 */
//		getDemo();
//		createAndDeleteDemo();
//		isDemo();
//		renameToDemo();
		
//		listRootsDemo();
	}
	
	
	
	
	
	public static void listRootsDemo() {
		
		File file = new File("d:\\");
		
		System.out.println("getFreeSpace:"+file.getFreeSpace());
		System.out.println("getTotalSpace:"+file.getTotalSpace());
		System.out.println("getUsableSpace:"+file.getUsableSpace());
		
//		File[] files  = File.listRoots();		
//		for(File file : files){
//			System.out.println(file);
//		}
	}

	public static void renameToDemo() {
		
		File f1 = new File("c:\\9.mp3");
		
		File f2 = new File("d:\\aa.mp3");
		
		boolean b = f1.renameTo(f2);
		
		System.out.println("b="+b);
	}

	public static void isDemo() throws IOException{
		File f = new File("aaa");
		
//		f.mkdir();
		f.createNewFile();
		
//		boolean b = f.exists();		
//		System.out.println("b="+b);
		// 最好先判断是否存在。 
		System.out.println(f.isFile());
		System.out.println(f.isDirectory());
		
		
	}
	
	
	
	
	public static void createAndDeleteDemo() throws IOException {
		
		File dir = new File("abc\\q\\e\\c\\z\\r\\w\\y\\f\\e\\g\\s");
		
//		boolean b = dir.mkdir();//make directory		
//		System.out.println("b="+b);
//		dir.mkdirs();//创建多级目录
		System.out.println(dir.delete());
		
//		System.out.println(dir.delete());
		
		
//		文件的创建和删除。
//		File file = new File("file.txt");
		
		/*
		 * 和输出流不一样,如果文件不存在,则创建,如果文件存在,则不创建。 
		 * 
		 */
//		boolean b = file.createNewFile();		
//		System.out.println("b="+b);
		
//		boolean b = file.delete();
//		System.out.println("b="+b);
		
	}



	public static void getDemo(){
//		File file = new File("E:\\java0331\\day22e\\a.txt");
		File file = new File("a.txt");
		
		String name = file.getName();
		
		String absPath = file.getAbsolutePath();//绝对路径。
		
		String path = file.getPath();
		
		long len = file.length();
		
		long time = file.lastModified();
		
		Date date = new Date(time);
		
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
		
		String str_time = dateFormat.format(date);
		
		
		System.out.println("parent:"+file.getParent());
		
		System.out.println("name:"+name);
		System.out.println("absPath:"+absPath);
		System.out.println("path:"+path);
		System.out.println("len:"+len);
		System.out.println("time:"+time);
		System.out.println("str_time:"+str_time);
		
	}

}


*37-IO流(File对象-常见功能-获取目录内容)



包含系统隐藏文件。














*38-IO流(File对象-常见功能-过滤器)


list是列出所有,但是新需求是:只列.java文件,怎么办?

接口:

filter


过滤器:

package cn.itcast.io.p2.filter;

import java.io.File;
import java.io.FilenameFilter;

public class FilterByJava implements FilenameFilter {

	@Override
	public boolean accept(File dir, String name) {

//		System.out.println(dir+"---"+name);
		
		return name.endsWith(".txt");
	}

}

	public static void listDemo_2() {
		
		File dir = new File("c:\\");
		
		String[] names = dir.list(new SuffixFilter(".txt"));
		
		for(String name : names){
			System.out.println(name);
		}
		
	}




package cn.itcast.io.p2.filter;

import java.io.File;
import java.io.FileFilter;

public class FilterByHidden implements FileFilter {

	@Override
	public boolean accept(File pathname) {

		return !pathname.isHidden();
	}

}




建一个专门过滤后缀名的过滤器:


package cn.itcast.io.p2.filter;

import java.io.File;
import java.io.FilenameFilter;

public class SuffixFilter implements FilenameFilter {

	private String suffix ;
	public SuffixFilter(String suffix) {
		super();
		this.suffix = suffix;
	}
	@Override
	public boolean accept(File dir, String name) {

		return name.endsWith(suffix);
	}

}




*39-IO流(File对象-练习-深度遍历文件夹)


新要求,当前+深度遍历(包括子目录)


list():如果只是列出文件和目录,不做其他操作,因为它只拿名称

listfiles():还有其他操作,它拿到的是对象。




只列了当前。






缩进显示:


package cn.itcast.io.p1.file.test;

import java.io.File;

/*
 * 需求:对指定目录进行所有内容的列出(包含子目录中的内容)
 * 也可以理解为 深度遍历。
 * 
 * 
 */

public class FileTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		File dir = new File("e:\\demodir");
		
		listAll(dir,0);
	}

	public static void listAll(File dir,int level) {
		
	
		System.out.println(getSpace(level)+dir.getName());
		//获取指定目录下当前的所有文件夹或者文件对象
		
		level++;
		File[] files = dir.listFiles();
		
		for(int x=0; x<files.length; x++){
			
			if(files[x].isDirectory()){
				listAll(files[x],level);
			}
			else
				System.out.println(getSpace(level)+files[x].getName());
		}	
	}

	private static String getSpace(int level) {
		
		StringBuilder sb = new StringBuilder();
		
		sb.append("|--");
		for(int x=0; x<level; x++){
			sb.insert(0,"|  ");
		}
		
		return sb.toString();
	}
	

}








*40-IO流(File对象-练习-递归)



栈内存会溢出。


		/*
		 * 递归:
		 * 函数自身直接或者间接的调用到了自身。 
		 * 
		 * 一个功能在被重复使用,并每次使用时,参与运算的结果和上一次调用有关。 
		 * 这时可以用递归来解决问题。 
		 * 
		 * 
		 * 注意:
		 * 1,递归一定明确条件。否则容易栈溢出。 
		 * 2,注意一下递归的次数。 
		 * 
		 */


	public static void toBin(int num){
		if(num>0){
			
			toBin(num/2);
			System.out.println(num%2);
			
		}
	}












栈溢出!!!

package cn.itcast.io.p1.digui;

public class DiGuiDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		
		/*
		 * 递归:
		 * 函数自身直接或者间接的调用到了自身。 
		 * 
		 * 一个功能在被重复使用,并每次使用时,参与运算的结果和上一次调用有关。 
		 * 这时可以用递归来解决问题。 
		 * 
		 * 
		 * 注意:
		 * 1,递归一定明确条件。否则容易栈溢出。 
		 * 2,注意一下递归的次数。 
		 * 
		 */
//		show();
//		toBin(6);
		int sum = getSum(9000);
		
		System.out.println(sum);
	}
	
	public static int getSum(int num){
		
		
		int x = 9;
		if(num==1)
			return 1;
		
		return num+getSum(num-1);
		
	}
	
	public static void toBin(int num){
		if(num>0){
			
			toBin(num/2);
			System.out.println(num%2);
			
		}
	}
	
	/*
	public static void show(){
		
		method();
		
	}
	public static void method(){
		show();
	}
	*/
	

}


*41-IO流(File对象-练习-删除目录)


package cn.itcast.io.p1.file.test;

import java.io.File;


/*
 * 删除一个带内容的目录。 
 * 
 * 原理:必须从最里面往外删。 
 * 需要进行深度遍历。
 * 
 * 
 * 
 */
public class RemoveDirTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		File dir  = new File("e:\\demodir");
//		dir.delete();
		removeDir(dir);
	}

	public static void removeDir(File dir) {
		
		File[] files = dir.listFiles();
		
		for(File file : files){
			
			if(file.isDirectory()){
				removeDir(file);
			}else{
				System.out.println(file+":"+file.delete());
			}
		}
		System.out.println(dir+":"+dir.delete());
	}
	

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值