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. 一些sql二

    1.说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)法一:select * into b from a where 1<>1(仅用于SQlServer)法二:sel ...

  2. Java的List排序

    有时需要对List排序,这时可以利用Collections的sort()方法来排序,不用自己再去排序. package myTest; import java.util.ArrayList; impo ...

  3. 泛函编程(33)-泛函IO:Free Functor - Coyoneda

    在前几期讨论中我们终于推导出了Free Monad.这是一个Monad工厂,它可以把任何F[A]变成Monad.可惜的是它对F[A]是有所要求的:F必须是个Functor.Free Monad由此被称 ...

  4. Android总结篇系列:Android Intent

    Intent在Android中的重要性不言而喻.本文主要总结下Intent使用过程中需要注意的一些问题. 1.隐式Intent AndroidManifest.xml声明时<intent-fil ...

  5. socket.io,环境搭建 & Hello world

    原文:http://www.cnblogs.com/xiezhengcai/p/3955827.html socket.io 一个与服务器实时通信的工具,它与原生的webSocket相比,具有更可靠. ...

  6. mesos 学习笔记1 -- mesos安装和配置

    参考资料: 官方文档:http://mesos.apache.org/documentation 中文翻译:http://mesos.mydoc.io/ GitHub:https://github.c ...

  7. C# 如何实现带消息数的App图标

    上次写了一篇博文,但是每次更新图标时,桌面会闪烁(刷新),有博友说人家的图标都不会刷新,还能动画.我想了一下,如果要达到这个效果,可以用Form来实现,就是在Form中嵌入一个图片,然后用一个labe ...

  8. TwentyTwenty – 使用 jQuery 实现图片对比功能

    这是一款非常棒的图片对比工具,能够方便的应用到你的网站中.其基本思路是把两张图片层叠在一起,当你拖动滑竿的时候,利用 CSS clip 裁剪图片,进行形成视觉对比效果. 您可能感兴趣的相关文章 Met ...

  9. Winjs – 微软开源技术发布的 JavaScript 组件集

    Winjs 是由微软开源技术的开发者推出的一组 JavaScript 组件,包括 ListView.ListView.Tooltip.DatePicker.Ratings 等等,帮助 Web 开发人员 ...

  10. JS高程2.在HTML中使用Javascript(2)

    1.延迟脚本defer 在<script>元素中设置defer属性,相当于告诉浏览器立即下载,但是延迟执行.<script>中的脚本会延迟到浏览器遇到</html> ...