*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());
}
}