File 类

用来将文件或者文件夹封装成对象

方便对文件与文件夹进行操作。

File对象可以作为参数传递给流的构造函数

流只用操作数据,而封装数据的文件只能用File类



File类常见方法:

1.创建

boolean createNewFile():在指定位置创建文件。如果该文件已经创建,则不创建。

2.删除

boolean delete();删除失败,返回false

void deleteOnExit();在程序退出时,删除指定文件。

3.判断

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

boolean mkdir():创建文件夹

boolean mkdirs():创建多级文件夹

isFile();

isDirectory();

isHidden();

isAbsolute();

4.获取信息

getName();

getPath();//相对路径文件

getAbsoluteFile()//返回的是对象

getAbsolutePath()//返回的是字符串

getParent(); //如果没有明确的指定它的路径,则返回一个null

lastModified();

length();

import java.io.*;
class FileDemo{
	public static void main(String[]args)throws IOException{
		ConsMethod();
		method_1();
		method_2();
		method_3();
		method_4();
		method_5();
	}

	public static void method_1()throws IOException{
		File f=new File("file.txt");
		sop("create"+f.createNewFile());//sop在文件操作中相当于打印(System.out);
		f.delete(OnExit());
		sop("delete"+f.delete());
	}
	public static void method_2()throws IOException{
		File f=new File("FileDemo.java");
		sop("execute"+f.canExecute());//判断文件是否可执行
		//创建文件夹
		File dir=new File("abc");
		sop("mkdir"+dir.mkdir());
	}
	public static void method_3()throws IOException{
		File f=new File("FileDemo.java");
		f.createFile();
		//记往在判断文件对象是否是文件或者目的时,必须要先判断该文件对象封装的内容是否存在。通过exists判断。
		sop("dir"+f.isDirectory());
		sop("dir"+f.isFile());
	}
	public static void method_4()throws IOException{
		File f=new File("file.txt");

		sop("path"+f.getPath());
		sop("abpath"+f.getAbsolutePath());
		sop("parent"+f.getParent());//这个方法返回的是绝对路径下的父目录。如果是相对,则返回null
	}
	public static void method_5()throws IOException{
		File f1=new File("c:\\Test.java");
		File f2=new File("d:\\sf.java");
		sop("rename"+f1.renameTo(f2));//返回的是true或false,这种方法类似剪切。移动。。
	}

	public static void ConsMethod(){
		//将a.txt封装成file对象,可以将已有的和为出现的文件或者文件夹
		File f1=new File("a.txt");
		File f2=new File("c:\\abc","b.txt");
		File f4=new File("c:"+File.separator+"abc\\zzz\\a.txt");//目录分隔符
	}
}



FilenameFilter:这是一个接口,实现此接口的类实例可用载过滤文件名

import java.io.*;
class FileDemo2{
	public static void main(String[] args){
		listRootsDemo();
		listDemo();
		File dir=new File("d:\\Programfiles\\");
		String[] arr=dir.list(new FilenameFilter(){
			public void accept(File dir,String name){
				//System.out.println("dir:"+dir+"...name::"+name);
				//return false;
				return name.endWith(".bmp");
			}
		});//传递一个匿名内部类
		for(String name:arr){
			System.out.println(name);//
		}
	}
	public static void listRootsDemo(){
		File[] files=File.listRoots();
		for(File f:files){
			System.out.println(f);
		}
	}
	public static void listsDemo(){
		File[] files=new File("c:\\");
		String [] names=f.list();//调用list方法的file对象必须是封装了一个目录,该目录还必须存在。
		for(String name:names){
			System.out.println(name);
		}
		for(File f:files){
			System.out.println(f);
		}
	}
}

列出指定目录下文件夹或者文件夹,包含子目录中的内容。也就是指定目录下所有内容。因为目录中还有目录,只要使用同一个列出目录的功能函数完成即可。

在列出的过程中出现的还是目录的话,还可以再次调用本功能。

这种表现形式的手法,称为递归。

递归要注意:

1.限定条件。

2.要注意递归的次数。尽量避免内存溢出

import java.io.*;
class FileDemo{
	public static void main(Stirng[] args){
		File dir=new File("d:\\Programfiles");
		showDir(dir);
		toBin(6);

	}

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

		}
	}

	public static void showDir(File dir){
		System.out.println(dir);
		File[] files=dir.listFiles();
		for(int x=0;x<files.length();x++){
			if(files[x].isDirectory())
			showDir(files[x]);//如果判断是子目录,则再调用showdir
			else
			System.out.println(files[x);
		}
	}
}showA();

void showA(){
	showB();
	sop(A);
}
void showB(){
	showC();
	sop(B);
}
void showC(){
	sop(C);
}
<span style="font-size:18px;color:#ff0000;"><strong>列出目录下所有的内容。</strong></span>
import java.io.*;
class FileDemo3{
	public static void main(Stirng[] args){
		File dir=new File("d:\\Programfiles");
		showDir(dir);

	}
	public static String getLevel(int level){
		StringBuilder sb=new StringBuilder();
		for(int x=0;x<level;x++){
			sb.append(" ");
		}
		return sb.toString();
	}

	public static void showDir(File dir(int level)){
		System.out.println(getLevel(level)+dir.getName());
		level++;
		File[] files=dir.listFiles();
		for(int x=0;x<files.length();x++){
			if(files[x].isDirectory())
			showDir(files[x],level);//如果判断是子目录,则再调用showdir
			else
			System.out.println(getLevel(level)+Files(x));
		}
	}
}

删除一个带内容的目录

删除原理:

在window中,删除目录从里面住外删除的。

既然是从里往外删除,就需要用到递归

删除的文件不会出现在回收站里




import java.io.*;

class removeDir{

public static void main(String[] args){

File dir=new File("d:\\testDir");

remove(dir);

}

public static void remove(File dir){

File[] files=dir.listFiles();

for(int x=0;x<files.length;x++){

if(!files[x].isHidden()&&files[x].isDirectory())

remove(files[x]);

else

System.out.println(files[x].toString()+"-file-"+files[x].delete());//删除的时候打印一下,就要以看到是否重删等



}

System.out.println(dir.toString()+"-dir-"+dir.delete());

}

}



思路:

1、对指定的目录进行递归。

2.获取递归过程中所有的java文件路径

3.将这些路径存诸到集合中。

4.将集合中的数据写入到一个文件夹中

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class javaFileList {

	public static void main(String[] args) throws IOException{
		File dir=new File("d:\\java1223");
		List<File> list=new ArrayList<File>();
		fileToList(dir,list);
		System.out.println(list.size());
		File file=new File(dir,"javalist.txt");
		writeToFile(list, file.toString());

	}
	public static void fileToList(File dir,List<File> list){
		File[] files=dir.listFiles();
		for(File file:files){//遍历文件
			if(file.isDirectory())
				fileToList(file,list);//如果是目录,则继续递归
			else{
				if(file.getName().endsWith(".java"))//如果判断扩展名是.java,则加入文件集合
				list.add(file);
			}
		}
	}

	public static void writeToFile(List<File> list,String javaListFile)throws IOException{
		BufferedWriter bufw=null;

		try {
			bufw=new BufferedWriter(new FileWriter(javaListFile));
			for(File f:list){
				String path=f.getAbsolutePath();
				bufw.write(path);
				bufw.newLine();
				bufw.flush();
			}

		} catch (Exception e) {
			throw e;//这样扔的话,必须在上面标识IO异常
		}
		finally{
			try {
				if(bufw!=null)
					bufw.close();
			} catch (Exception e2) {
				throw e2;
			}
		}
	}
}

Java基础---Java---IO流-----File 类、递归、删除一个带内容的目录、列出指定目录下文件夹、FilenameFilte的更多相关文章

  1. File类_删除一个带内容的目录_练习

    需求:删除一个带内容的目录 原理:必须从最里面往外删除需要深度遍历 import java.io.File; public class RemoveDirTest { public static vo ...

  2. java基础之IO流(二)之字符流

    java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...

  3. Java基础之IO流整理

    Java基础之IO流 Java IO流使用装饰器设计模式,因此如果不能理清其中的关系的话很容易把各种流搞混,此文将简单的几个流进行梳理,后序遇见新的流会继续更新(本文下方还附有xmind文件链接) 抽 ...

  4. java基础之IO流(一)字节流

    java基础之IO流(一)之字节流 IO流体系太大,涉及到的各种流对象,我觉得很有必要总结一下. 那什么是IO流,IO代表Input.Output,而流就是原始数据源与目标媒介的数据传输的一种抽象.典 ...

  5. 【Java基础】IO 流

    IO 流 File 类 java.io.File 类是文件和文件目录路径的抽象表示形式,与平台无关. File 能新建.删除.重命名文件和目录,但 File 不能访问文件内容本身. 如果需要访问文件内 ...

  6. JAVA:IO流——File类

    1.掌握File 类的作用 2.可以使用File 类中的方法对文件进行操作 所有的 io 操作都保存在 java.io 包中. 构造方法:public File (String pathname) 直 ...

  7. Java—IO流 File类的常用API

    File类 1.只用于表示文件(目录)的信息(名称.大小等),不能用于文件内容的访问. package cn.test; import java.io.File; import java.io.IOE ...

  8. Java第三阶段学习(一、IO流------File类)

    一.IO概述: 把内存中的数据存入到硬盘(持久化设备)中叫做:输出(写)Output操作.JAVA软件往电脑硬盘上走叫输出. 把硬盘中的数据读取到到内存里叫做:输入(读)Input操作.电脑硬盘上往J ...

  9. 09、IO流—File类与IO流

    目录 一.File类 基本认识 实用方法 获取功能 重命名功能(包含剪切) 判断功能 创建.删除文件 实际小案例 二.IO流 1.认识IO流 2.IO流基类介绍 字节流基类介绍 字符流基类介绍 三.节 ...

随机推荐

  1. HDU2425:Hiking Trip(BFS+优先队列)

    给出一个地图,地图有四种路面,经过每种路面花费的时间不同,问从起点到终点所花费的最少时间是多少 把到各个点的花费存入队列中,然后弹出,即可得到最小 Sample Input 4 6 1 2 10 T. ...

  2. AR8033 1000M模式下ping包丢包率过大分析与解决

    1 现象 近期对一款基于QCA方案.有线Phy为AR8033.WiFi双频且支持iEEE802.11AC的WLAN产品进行了深度验证,发现有线口同部分PC机直连时,WiFi终端ping 该PC机时总是 ...

  3. oracle安装过程和创建本地数据库

    环境: win7 64位 工具: PLSQL Developer 百度云下载:链接:https://pan.baidu.com/s/14L3VCG8YwHzpdhEN7ama0w 密码:jlre or ...

  4. jQuery简介和基础

    一.函数变量的作用域 1.变量的作用域实在声明时决定的而不是调用执行时决定 <script> var a=6,b=7; function t() { // var a=3,b=5; con ...

  5. Thinkphp中的U函数(Thinkphp3.2.3版本)

    U函数的作用是根据当前的URL设置生成对应的URL地址,使用U函数可以确保项目在移植过程中不受环境的影响. U方法的定义规则如下(方括号内参数根据实际应用决定): U('地址表达式',['参数'],[ ...

  6. Unity3d 简单的小球沿贝塞尔曲线运动(适合场景漫游使用)

        简单的小球沿贝塞尔曲线运动,适合场景漫游使用 贝塞尔曲线:(贝塞尔曲线的基本想法部分摘自http://blog.csdn.net/u010019717/article/details/4768 ...

  7. pytorch_SRU(Simple Recurrent Unit)

    导读 本文讨论了最新爆款论文(Training RNNs as Fast as CNNs)提出的LSTM变种SRU(Simple Recurrent Unit),以及基于pytorch实现了SRU,并 ...

  8. vue中的eventBus

    在vue2中,父子组件传递数据,父组件可以直接传递数据进子组件,而子组件通过调用父组件传递进来的方法,将自己的数据传递回去. 那兄弟组件之间,或者是兄弟组件的子组件之间如何传递呢? 当然vuex是一种 ...

  9. webservice服务器端获取request对象的三种方式

    有的时候在webservice里我们需要获取request对象和response对象,比如想要获得客户端的访问ip的时候就需要这么做,下面说三种方式,当然三种方式可能是针对不同方式部署webservi ...

  10. angularJS入门笔记

    1.debug调试工具:batarang2.ng指令 1.ng-app=" " 定义angularJS的使用范围:----main方法,入口 ng-app="myModu ...