Java基础---Java---IO流-----File 类、递归、删除一个带内容的目录、列出指定目录下文件夹、FilenameFilte
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的更多相关文章
- File类_删除一个带内容的目录_练习
需求:删除一个带内容的目录 原理:必须从最里面往外删除需要深度遍历 import java.io.File; public class RemoveDirTest { public static vo ...
- java基础之IO流(二)之字符流
java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...
- Java基础之IO流整理
Java基础之IO流 Java IO流使用装饰器设计模式,因此如果不能理清其中的关系的话很容易把各种流搞混,此文将简单的几个流进行梳理,后序遇见新的流会继续更新(本文下方还附有xmind文件链接) 抽 ...
- java基础之IO流(一)字节流
java基础之IO流(一)之字节流 IO流体系太大,涉及到的各种流对象,我觉得很有必要总结一下. 那什么是IO流,IO代表Input.Output,而流就是原始数据源与目标媒介的数据传输的一种抽象.典 ...
- 【Java基础】IO 流
IO 流 File 类 java.io.File 类是文件和文件目录路径的抽象表示形式,与平台无关. File 能新建.删除.重命名文件和目录,但 File 不能访问文件内容本身. 如果需要访问文件内 ...
- JAVA:IO流——File类
1.掌握File 类的作用 2.可以使用File 类中的方法对文件进行操作 所有的 io 操作都保存在 java.io 包中. 构造方法:public File (String pathname) 直 ...
- Java—IO流 File类的常用API
File类 1.只用于表示文件(目录)的信息(名称.大小等),不能用于文件内容的访问. package cn.test; import java.io.File; import java.io.IOE ...
- Java第三阶段学习(一、IO流------File类)
一.IO概述: 把内存中的数据存入到硬盘(持久化设备)中叫做:输出(写)Output操作.JAVA软件往电脑硬盘上走叫输出. 把硬盘中的数据读取到到内存里叫做:输入(读)Input操作.电脑硬盘上往J ...
- 09、IO流—File类与IO流
目录 一.File类 基本认识 实用方法 获取功能 重命名功能(包含剪切) 判断功能 创建.删除文件 实际小案例 二.IO流 1.认识IO流 2.IO流基类介绍 字节流基类介绍 字符流基类介绍 三.节 ...
随机推荐
- ●BZOJ 1854 [Scoi2010]游戏
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1854 题解: 并查集(还可以用匈牙利算法进行单路增广的二分图匹配) 把每个武器看成是一条边, ...
- html高度塌陷以及定位的理解
高度塌陷的含义: 父元素的高度,默认被子元素撑开,目前来讲box2多高,box1就多高.此时如果子元素设置浮动,则会导致其完全脱离文档流,子元素脱离文档流将无法撑开父元素, 导致父元素的高度丢失,就是 ...
- 异步 JavaScript 之 macrotask、microtask
1.异步任务运行机制 先运行下面的一段代码: console.log('script start'); setTimeout(function() { console.log('setTimeout' ...
- Linux学习之CentOS(八)----文件与目录的默认权限与隐藏权限(转)
文件与目录的默认权限与隐藏权限 一个文件有若干个属性, 包括读写运行(r, w, x)等基本权限,及是否为目录 (d) 与文件 (-) 或者是连结档 (l) 等等的属性! 要修改属性的方法在前面也约略 ...
- 将jdbc连接明文密码加密方案
最近没有及时写文章,把最近处理的几个问题集中了一下写出来.这篇文章是关于如何处理spring项目中引入数据库连接等 使用的用户名和密码的明文进行加密.防止被他人窃取利用. 我们选择的加密方式为DES加 ...
- Luogu P2756 [网络流24题]飞行员配对方案问题_二分图匹配
二分图模板题 我用的是匈牙利 其实最大流也可以做 #include<iostream> #include<cstdio> #include<cstdlib> #in ...
- Win10 下Cmake编译配置 Opencv3.1 + Cuda7.5 + VS2013
折腾了三天终于配置成功了,在此写下编译配置的全部步骤和遇到的很多坑. 整体介绍: OpenCV 中 CUDA 实现的函数还不是太多,使用前要在OpenCV的官网上确认以下你想要的功能是否已经实现,否则 ...
- python学习之路网络编程篇(第二篇)
新课程知识的引入:python作用域 #python中无块级别作用域 if 1 == 1 : name = 'alex' print(name) for i in range(10): name = ...
- js 利用 ajax 加载 js ,显示加载进度 ,严格按照js的顺序先后加载到页面
js 利用 ajax 加载 js ,显示加载进度 ,严格按照js的顺序先后加载到页面 , 做手机端开发时,发现一个问题,有些浏览器,在网速比较慢的情况下,js文件没有加载完,后续的调用已经开始调用了, ...
- 01_Struts2概述及环境搭建
1.Struts2概述: Struts2是一个用来开发MVC应用程序的框架. Struts2提供了web应用程序开发过程中一些常见问题的解决方案; 对用户输入的数据进行合法性验证 统一的布局 可扩展性 ...