Day20

01 File概述
02 File对象功能-创建和删除
03 File对象功能-判断
04 File对象功能-获取
05 File对象功能-文件列表1
06 File对象功能-文件列表2
07 列出目录下所有内容-递归
08 列出目录下所有内容-带层次
09 删除带内容的目录

01 File概述

File类
用来将文件或者文件夹封装成对象
方便对文件与文件夹进行操作
File对象可以作为参数传递给流的构造函数
了解File类中的常用方法。

public static final String separator:与系统有关的默认名称分隔符,它被表示为一个字符串。
 import java.io.*;
public class FileDemo
{
public static void main(String[] args)
{
consMethod(); }
//创建File对象
public static void consMethod()
{
//将q.txt封装成File对象。可以将已有的和未出现的文件或者文件夹封装成对象。
File f1=new File("q.txt"); File f2=new File("d:\\abc","w.txt"); File d=new File("d:\\abc");
File f3=new File(d,"e.txt"); sop("f1:"+f1);
sop("f2:"+f2);
sop("f3:"+f3); //File.separator是跨平台的。
File f4=new File("d:"+File.separator+"abc"+File.separator+"r.txt"); }
public static void sop(Object obj)
{
System.out.println(obj);
}
}

02 File对象功能-创建和删除

boolean createNewFile():当且仅当不存在此指定名称的文件时,创建一个新的空文件。
boolean delete():删除此抽象路径名表示的文件或目录。
void deleteOnExit():在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。

 /*
File类常见方法:
1.创建
boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false
和输出流不一样,输出流对象建立文件,如果文件已经存在,则会覆盖。
2.删除
boolean delete():删除失败返回false
void deleteOnExit:在程序退出时删除指定文件。
*/
import java.io.*;
public class FileDemo2
{
public static void main(String[] args) throws IOException
{
method(); } public static void method()throws IOException
{
File f=new File("file.txt");
sop("create:"+f.createNewFile()); }
public static void sop(Object obj)
{
System.out.println(obj); }
}

03 File对象功能-判断

创建文件夹:
boolean mkdir():创建一级文件夹
boolean mkdirs():创建多级文件夹
判断:
boolean exists():文件是否存在。
boolean canExecute():测试文件是否可执行
isFile():是否是文件。
isDirectory():是否是目录
isHidden():测试此抽象路径名指定的文件是否是一个隐藏文件。
isAbsolute():测试此抽象路径名是否为绝对路径名。

04 File对象功能-获取

getName():返回文件或者目录的名称。
getPath():将此抽象路径名转换为一个路径字符串。
getParent():返回父目录的路径字符串;如果此路径名没有指定父目录,则返回null。

getAbsolutePath():返回绝对路径。
long lastModified():返回文件最后一次被修改的时间,
long length():返回文件的长度。

public boolean renameTo(File dest):重命名此抽象路径表示的文件

 /*
获取信息:
getName();
getPath();
getParent(); getAbsolutePath();
long lastModofied();
long length(); removeTo(): */
import java.io.*;
public class FileDemo2
{
public static void main(String[] args) throws IOException
{
method_5(); }
public static void method_5()
{
File f1=new File("d:\\abc\\a.txt");
File f2=new File("e:\\hahaha.txt");
sop("rename:"+f1.renameTo(f2)); } public static void method_4()
{
File f=new File("file.txt"); sop("path:"+f.getPath());
sop("abspath:"+f.getAbsolutePath());
//该方法返回的是绝对路径中的父目录
//如果获取的是相对路径,返回null
//如果相对路径中有上一层目录,那么该目录就是返回结果
sop("parent:"+f.getParent()); }
public static void method()throws IOException
{
File f=new File("file.txt");
sop("create:"+f.createNewFile()); }
public static void sop(Object obj)
{
System.out.println(obj); }
}

05 File对象功能-文件列表1

static File[] listRoots():列出可用的文件系统根。
String[] list():返回一个字符串数组,这些字符串指定路径名表示的目录中的文件和目录。

 import java.io.*;
public class FileDemo3
{
public static void main(String[] args)
{ listRootDemo();
listDemo();
}
//列出指定路径下所有的文件
public static void listDemo()
{
File f=new File("d:\\");
//当调用list的对象是一个文件时,会发生空指针异常,因为返回的数组为空
String[] string=f.list();
for(String s:string)
{
System.out.println(s);
}
}
//列出计算机中中所有可用的盘符
public static void listRootDemo()
{
File[] files =File.listRoots();
for(File f:files)
{
System.out.println(f);
}
}
}

06 File对象功能-文件列表2

String list(FilenameFilter filter):返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。

其中,FilenameFilter是一个接口,里面只有一个抽象方法accept

 import java.io.*;
public class FileDemo3
{
public static void main(String[] args)
{
listDemo_2();
listDemo_3(); }
public static void listDemo_3()
{
//list()和listFiles()的区别
//list()返回的是字符串数组
//listFiles()返回的是File数组
File dir=new File("c:\\");
File[] files=dir.listFiles();
for(File f:files)
{
System.out.println(f.getName()+"::"+f.length());
}
}
//带参数的list方法,返回满足指定过滤器的文件和目录
public static void listDemo_2()
{
File dir=new File("d:\\abc");
//使用匿名内部类来实现FilenameFilter接口的抽象方法
String[] arr=dir.list(new FilenameFilter()
{
public boolean accept(File dir,String name)
{
return name.endsWith(".bmp");
}
});
for(String name:arr)
{
System.out.println(name);
} }
}

07 列出目录下所有内容-递归

列出指定目录下的文件或者文件夹,包含子目录的内容,
也就是列出指定目录下的所有内容。

因为目录中还有目录,只要使用同一个列出目录功能的方法完成即可。
在列出的过程中出现的还是目录的话,就再次调用本方法。
这种编程手法,叫做递归。

 /*

 递归要注意:
1.递归条件
2.递归次数:避免内存溢出
*/
import java.io.*;
public class FileDemo_4
{
public static void main(String[] args)
{
File dir=new File("d:\\");
//showDir(dir);
//求6的二进制
toBin(6);
//求1到100的和
System.out.println("求1到100的和为:"+getSum(100)); }
//递归小例子,十进制变二进制
public static void toBin(int num)
{
if(num>0)
{
toBin(num/2);
System.out.println(num%2);
} }
//递归小例子2,求和
//注意,递归次数过多,可能造成内存溢出
public static int getSum(int n)
{
if(n==1)
return 1;
return n+getSum(n-1);
}
//显示目录
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]);
else
System.out.println(files[x]);
}
}
}

08 列出目录下所有内容-带层次

上一小节中中递归显示的目录有点乱,怎么打印出有层次的目录呢?

 //显示出带有层次的目录
import java.io.*;
public class FileDemo_5
{
public static void main(String[] args)
{
File f=new File("D:\\phpnow");
showDir(f,0); }
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);
else
System.out.println(getLevel(level)+files[x].getName());
}
}
}

09 删除带内容的目录

删除一个带内容的目录

删除原理:
在Windows中,删除目录是从里往外删除的。
既然是从里往外删除,就需要用到递归。

 import java.io.*;
public class RemoveDir
{
public static void main(String[] args)
{
File f=new File("D:\\课堂练习");
removeDir(f); }
public static void removeDir(File dir)
{
File[] files=dir.listFiles();
for(int x=0;x<files.length;x++)
{
if((!files[x].isHidden() )&& files[x].isDirectory())
{removeDir(files[x]);}
else
{System.out.println(files[x].toString()+"--"+files[x].delete());} }
System.out.println(dir+"::"+dir.delete());
}
}

IO流04--毕向东JAVA基础教程视频学习笔记的更多相关文章

  1. 多线程--毕向东java基础教程视频学习笔记

    目录 1.多线程运行的安全问题 2.多线程同步代码块 3.同步方法的锁是this 4.静态同步方法的锁是Class对象 5.单例设计模式(面试中的考点) 6.死锁(一个发生死锁的例子) 多线程运行的安 ...

  2. IO流01--毕向东JAVA基础教程视频学习笔记

    提要 01 IO流(BufferedWriter)02 IO流(BufferedReader)03 IO流(通过缓冲区复制文本文件)04 IO流(readLine的原理)05 IO流(MyBuffer ...

  3. IO流03--毕向东JAVA基础教程视频学习笔记

    提要 16 读取转换流17 写入转换流18 流操作规律-119 流操作规律-220 改变标准输入输出设备21 异常的日志信息22 系统信息 16 读取转换流 字符流体系中的InputStreamRea ...

  4. 网络编程2--毕向东java基础教程视频学习笔记

    Day 23 08 Udp接收端09 Udp键盘录入数据方式10 Udp聊天11 TCP传输12 TCP传输213 TCP练习14 TCP复制文件 08 Udp接收端 需求:定义一个应用程序,用于接收 ...

  5. IO流05--毕向东JAVA基础教程视频学习笔记

    Day20 10 创建java文件列表11 Properties简述12 Properties存取13 Properties存取配置文件14 Properties练习15 PrintWriter16 ...

  6. IO流02--毕向东JAVA基础教程视频学习笔记

    提要 08 自定义装饰类09 LineNumberReader10 MyLineNumberReader11 字节流File读写操作12 拷贝图片13 字节流的缓冲区14 自定义字节流的缓冲区-rea ...

  7. 网络编程3--毕向东java基础教程视频学习笔记

    Day24 01 TCP上传图片02 客户端并发上传图片03 客户端并发登录04 浏览器客户端-自定义服务端05 浏览器客户端-Tomcat服务端 01 TCP上传图片 import java.net ...

  8. 网络编程1--毕向东java基础教程视频学习笔记

    目录: 01 网络编程概述1 02 网络编程概述2 03网络编程 网络模型 04网络编程 IP地址 05网络编程 TCP和UDP 06网络编程 Socket 07网络编程 UDP发送端 01 网络编程 ...

  9. 集合3--毕向东java基础教程视频学习笔记

    Day 15 集合框架01 TreeSet02 TreeSet存储自定义对象03 二叉树04 实现Comparator方式排序05 TreeSet练习06 泛型概述07 泛型使用08 泛型类09 泛型 ...

随机推荐

  1. MVC之前的那点事儿系列

    MVC之前的那点事儿系列,是笔者在2012年初阅读MVC3源码的时候整理的,主要讲述的是从HTTP请求道进入MVCHandler之前的内容,包括了原创,翻译,转载,整理等各类型文章,当然也参考了博客园 ...

  2. idea IntelliJ IDEA 2016.2破解

    从2016-08-06开始全面切到HTTPS访问模式,而IntelliJ IDEA的License server不支持HTTPS访问,所以本博客将IntelliJ IDEA的在线注册码生成页面转到了h ...

  3. Android自定义surfaceView显示多张图片

    我自定义了一个surfaceview,我在上面绘制多张图片,让它能够上下方滚显示图片,但是onMeasure()方法在重写的时候遇到了问题,不知道如何设置它的高度, public class MySu ...

  4. [译]WebVR技术方案草案

    注:基于官方的.bs规范专用格式进行了翻译,但结果发现无法编译成html格式,所幸基本兼容.markdown格式. 中文翻译项目地址:https://github.com/web3d/webvr-sp ...

  5. 系统配置文件的加载设置-以xml文件为例

    前言:开发中经常会遇到加载一些配置文件信息,这些信息变化的概率很小,不需要实时的更新.这样的信息放在数据库里自然是不合适的,所以最好的办法是写在配置文件中,在程序第一次运行的时候加载到内存,以后用到的 ...

  6. Asynchronous Jobs

    Because Play is a web application framework, most of the application logic is done by controllers re ...

  7. jQuery的document ready与 onload事件——你真的思考过吗?

    在进行实验和资料查询时,我遇到了几个关键问题: 1. window.onload到底是什么加载完触发? 2. body为什么会有onload事件? 3. 为什么是window.onload,而不是do ...

  8. js异步编程

    前言 以一个煮饭的例子开始,例如有三件事,A是买菜.B是买肉.C是洗米,最终的结果是为了煮一餐饭.为了最后一餐饭,可以三件事一起做,也可以轮流做,也可能C需要最后做(等A.B做完),这三件事是相关的, ...

  9. 你真的知道setTimeout是如何运行的吗

    大家看下如下代码,猜猜执行结果: var start = new Date; setTimeout(function(){ console.log('时间流逝了:'+(new Date - start ...

  10. strurts2入门

    MVC :struts2是一个经典开源的mvc框架.主要负责控制器(Controller)   处理请求特点: 核心控制器:  +Actions; 与ServletAPI解耦合: 非单例,线程安全. ...