本文转自:http://blog.csdn.net/u011976033/article/details/12294769
作者:奋斗的路
奋斗的路
--------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------
1. File
File类是把文件和文件夹封装成了对象,方便操作文件或者是文件夹的属性,在创建的时候有通过构造方法来指定,有三种格式:
new File(“C:\\java\\a.txt”);
new File(“C:\\java”,“a.txt”);//这一种方法比第一种方法的优点是:把路径分开了,可以方便指定同一个文件夹下的文件
new File(“C:”+ File.separator +” java”+”a.txt”);//这一个方法可跨平台的使用,分隔符是跨平台的File.separator。
2. 基本方法
1.创建
创建分为创建文件和创建文件夹(目录)
- import java.io.File;
- import java.io.IOException;
- public class FileDemo {
- public static void main(String[] args) throws IOException {
- /* 指定文件对象 */
- File f = new File("F:" + File.separator + "java");
- File file = new File("F:\\java\\a.txt");
- /*
- * boolean mkdir()创建单级目录,当存在此目录,创建失败(false),否则创建成功(true) 例如:F:\\java
- * F盘必须存在 F:\\java\123 F:\\java必须存在 boolean
- * mkdirs()可以创建多级目录,即使前面的目录不存在,那么也会创建,存在此创建失败,不存在创建成功
- * 例如:F:\\java\day01\\hello 即使F盘中不存在java\\day01 那么使用此方法,也会创建前面不存在的目录
- * createNewFile()
- * 创建文件,指定的目录必须存在(F:\\java),如果此目录中存在此文件,此创建失败(false),不存在,则创建成功(true)
- */
- System.out.println(f.mkdir());// 创建单级目录
- System.out.println(file.createNewFile());// 创建文件
- System.out.println(new File("F:\\java\\123\\456").mkdirs());// 创建多级目录
- }
- }
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
/* 指定文件对象 */
File f = new File("F:" + File.separator + "java");
File file = new File("F:\\java\\a.txt");
/*
* boolean mkdir()创建单级目录,当存在此目录,创建失败(false),否则创建成功(true) 例如:F:\\java
* F盘必须存在 F:\\java\123 F:\\java必须存在 boolean
* mkdirs()可以创建多级目录,即使前面的目录不存在,那么也会创建,存在此创建失败,不存在创建成功
* 例如:F:\\java\day01\\hello 即使F盘中不存在java\\day01 那么使用此方法,也会创建前面不存在的目录
* createNewFile()
* 创建文件,指定的目录必须存在(F:\\java),如果此目录中存在此文件,此创建失败(false),不存在,则创建成功(true)
*/
System.out.println(f.mkdir());// 创建单级目录
System.out.println(file.createNewFile());// 创建文件
System.out.println(new File("F:\\java\\123\\456").mkdirs());// 创建多级目录
}
}
2. 删除
- public class FileDemo {
- public static void main(String[] args) throws IOException {
- /* 指定文件对象 */
- File f = new File("F:" + File.separator + "java");
- File file = new File("F:\\java\\a.txt");
- /*
- * boolean delete()删除文件或者是目录(空的),如果不存在,则是false,存在则删除
- * void deleteOnExit()程序退出时删除,即使前面出现了异常,那么在程序结束的时候也会执行此语句,删除此文件
- */
- System.out.println(f.delete());// 删除目录
- System.out.println(file.delete());// 删除文件
- }
- }
public class FileDemo {
public static void main(String[] args) throws IOException {
/* 指定文件对象 */
File f = new File("F:" + File.separator + "java");
File file = new File("F:\\java\\a.txt");
/*
* boolean delete()删除文件或者是目录(空的),如果不存在,则是false,存在则删除
* void deleteOnExit()程序退出时删除,即使前面出现了异常,那么在程序结束的时候也会执行此语句,删除此文件
*/
System.out.println(f.delete());// 删除目录
System.out.println(file.delete());// 删除文件
}
}
3. 判断
- import java.io.File;
- import java.io.IOException;
- public class FileDemo {
- public static void main(String[] args) throws IOException {
- /* 指定文件对象 */
- File f = new File("F:" + File.separator + "java");
- File file = new File("F:\\java\\a.txt");
- /*
- * boolean exists()判断文件或者目录是否存在 boolean isFile()判断是否是文件 boolean
- * isDirectory()判断是否是目录 boolean isHidden()判断是否是隐藏文件 boolean
- * isAbsolute()判断是否是绝对路径
- */
- System.out.println(f.exists());// 是否存在
- System.out.println(file.isFile());// 是否是文件,若存在,切是文件,那么就是true,否则是false
- System.out.println(file.isDirectory());// 判断是否是目录,存在且是文件,那么就是true,否则是false
- System.out.println(file.isAbsolute());// 判断是否是绝对路径
- }
- }
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
/* 指定文件对象 */
File f = new File("F:" + File.separator + "java");
File file = new File("F:\\java\\a.txt");
/*
* boolean exists()判断文件或者目录是否存在 boolean isFile()判断是否是文件 boolean
* isDirectory()判断是否是目录 boolean isHidden()判断是否是隐藏文件 boolean
* isAbsolute()判断是否是绝对路径
*/
System.out.println(f.exists());// 是否存在
System.out.println(file.isFile());// 是否是文件,若存在,切是文件,那么就是true,否则是false
System.out.println(file.isDirectory());// 判断是否是目录,存在且是文件,那么就是true,否则是false
System.out.println(file.isAbsolute());// 判断是否是绝对路径
}
}
4. 获取
boolean renameTo(File dest)重命名,也可以模拟移动哦,重命名到其他文件夹中,那就是移动了
- import java.io.File;
- import java.io.IOException;
- public class FileDemo {
- public static void main(String[] args) throws IOException {
- /* 指定文件对象 */
- File f = new File("F:" + File.separator + "java");
- File file = new File("F:\\java\\a.txt");
- /*
- * String getName()获得文件名称
- * String getParent()获得上一目录 String
- * getAbsolutePath()获得绝对路径
- * long length()获得文件大小 long
- * lastModified()获得最后一次修改的时间
- */
- System.out.println(f.getName());// 获得名称
- System.out.println(file.getName());// 获得名称
- System.out.println(f.getParent());// 获得上一目录
- System.out.println(file.getParent());// 获得上一目录
- System.out.println(f.getAbsolutePath());// 获得绝对路径
- System.out.println(file.getAbsolutePath());// 获得绝对路径
- }
- }
- 结果:
- java
- a.txt
- F:\
- F:\java
- F:\java
- F:\java\a.txt
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
/* 指定文件对象 */
File f = new File("F:" + File.separator + "java");
File file = new File("F:\\java\\a.txt");
/*
* String getName()获得文件名称
* String getParent()获得上一目录 String
* getAbsolutePath()获得绝对路径
* long length()获得文件大小 long
* lastModified()获得最后一次修改的时间
*/
System.out.println(f.getName());// 获得名称
System.out.println(file.getName());// 获得名称
System.out.println(f.getParent());// 获得上一目录
System.out.println(file.getParent());// 获得上一目录
System.out.println(f.getAbsolutePath());// 获得绝对路径
System.out.println(file.getAbsolutePath());// 获得绝对路径
}
}
结果:
java
a.txt
F:\
F:\java
F:\java
F:\java\a.txt
3.常用方法
- public class FileDemo {
- public static void main(String[] args) throws IOException {
- /*
- * String[] list()获得指定文件下的所有文件或者目录的名称(包含隐藏文件活目录)
- String[] list(FilenameFilter filter)获得名称的时候加入了过滤器(包含隐藏文件活目录)
- * File[] listFiles()获得的是指定文件下的所有File对象(包含隐藏文件活目录)
- * File[] listFiles(FilenameFilter filter)加入了过滤器(包含隐藏文件活目录)
- * static File[]listRoots()列出了可用目录的根
- */
- /* 获得所有的根目录,并打印出 */
- File[] rootFiles = File.listRoots();
- for (File f : rootFiles)
- System.out.println(f);
- /* 获得F盘下的所有文件或者目录的名称,并打印出 */
- String[] fileNames = new File("F:\\").list();
- System.out.println("-----------------\n所有名称");
- for (String name : fileNames)
- System.out.println(name);
- /* 获得F盘下的所有.txt文件安的名称,并打印出,使用的是过滤器,使用匿名内部类,复写accept方法 */
- String[] fileTxtNames = new File("F:\\").list(new FilenameFilter() {
- public boolean accept(File dir, String name) {// 此方法决定是否把其名字过滤
- return name.endsWith(".txt");
- }
- });
- System.out.println("-----------------\n.txt文件");
- for (String n : fileTxtNames)
- System.out.println(n);
- /*File[] listFiles()用法和list()用法一样,只是返回的是File对象数组*/
- File [] Files=new File("F:\\").listFiles();
- System.out.println("-----------------");
- for(File f:Files)
- System.out.println(f.getName()+":"+f.length());
- }
- }
- 结果:
- C:\
- D:\
- E:\
- F:\
- G:\
- -----------------
- 所有名称
- $RECYCLE.BIN
- A
- B
- ClassDemo.java
- Config.Msi
- demo.txt
- demo1.txt
- exception.log
- IP地址.doc
- itat
- java培训视频
- jsp
- music
- System Volume Information
- SystemInfo.txt
- voa
- yy
- 录音
- 新建文本文档.txt
- 照片
- 电子书
- 随笔知识点
- 黑马
- 黑马笔记
- -----------------
- .txt文件
- demo.txt
- demo1.txt
- SystemInfo.txt
- 新建文本文档.txt
- -----------------
- $RECYCLE.BIN:4096
- A:0
- B:0
- ClassDemo.java:682
- Config.Msi:0
- demo.txt:6
- demo1.txt:8
- exception.log:123
- IP地址.doc:58368
- itat:4096
- java培训视频:4096
- jsp:4096
- music:28672
- SystemVolume Information:0
- SystemInfo.txt:1904
- voa:0
- yy:0
- 录音:4096
- 新建文本文档.txt:29
- 照片:4096
- 电子书:4096
- 随笔知识点:4096
- 黑马:4096
- 黑马笔记:16384
public class FileDemo {
public static void main(String[] args) throws IOException {
/*
* String[] list()获得指定文件下的所有文件或者目录的名称(包含隐藏文件活目录)
String[] list(FilenameFilter filter)获得名称的时候加入了过滤器(包含隐藏文件活目录)
* File[] listFiles()获得的是指定文件下的所有File对象(包含隐藏文件活目录)
* File[] listFiles(FilenameFilter filter)加入了过滤器(包含隐藏文件活目录)
* static File[]listRoots()列出了可用目录的根
*/
/* 获得所有的根目录,并打印出 */
File[] rootFiles = File.listRoots();
for (File f : rootFiles)
System.out.println(f);
/* 获得F盘下的所有文件或者目录的名称,并打印出 */
String[] fileNames = new File("F:\\").list();
System.out.println("-----------------\n所有名称");
for (String name : fileNames)
System.out.println(name);
/* 获得F盘下的所有.txt文件安的名称,并打印出,使用的是过滤器,使用匿名内部类,复写accept方法 */
String[] fileTxtNames = new File("F:\\").list(new FilenameFilter() {
public boolean accept(File dir, String name) {// 此方法决定是否把其名字过滤
return name.endsWith(".txt");
}
});
System.out.println("-----------------\n.txt文件");
for (String n : fileTxtNames)
System.out.println(n);
/*File[] listFiles()用法和list()用法一样,只是返回的是File对象数组*/
File [] Files=new File("F:\\").listFiles();
System.out.println("-----------------");
for(File f:Files)
System.out.println(f.getName()+":"+f.length());
}
}
结果:
C:\
D:\
E:\
F:\
G:\
-----------------
所有名称
$RECYCLE.BIN
A
B
ClassDemo.java
Config.Msi
demo.txt
demo1.txt
exception.log
IP地址.doc
itat
java培训视频
jsp
music
System Volume Information
SystemInfo.txt
voa
yy
录音
新建文本文档.txt
照片
电子书
随笔知识点
黑马
黑马笔记
-----------------
.txt文件
demo.txt
demo1.txt
SystemInfo.txt
新建文本文档.txt
-----------------
$RECYCLE.BIN:4096
A:0
B:0
ClassDemo.java:682
Config.Msi:0
demo.txt:6
demo1.txt:8
exception.log:123
IP地址.doc:58368
itat:4096
java培训视频:4096
jsp:4096
music:28672
SystemVolume Information:0
SystemInfo.txt:1904
voa:0
yy:0
录音:4096
新建文本文档.txt:29
照片:4096
电子书:4096
随笔知识点:4096
黑马:4096
黑马笔记:16384
4. 输出目录下的所有内容
利用的是递归算法
- import java.io.File;
- import java.io.FilenameFilter;
- import java.io.IOException;
- public class FileDemo {
- public static void main(String[] args) throws IOException {
- File file = new File("F:\\黑马");
- showDir(file, 0);
- }
- /* 格式方式 */
- public static String show(int level) {
- StringBuilder sb = new StringBuilder();
- sb.append("|-");
- for (int i = 0; i < level; i++) {
- sb.insert(0, " ");
- }
- return sb.toString();
- }
- /* 利用递归显示 */
- public static void showDir(File dir, int level) {
- System.out.println(show(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(show(level) + Files[x].getName());
- }
- }
- }
- }
- 结果:
- |-heima
- |-Game.rar
- |-Java常用英语汇总.doc
- |-java特性.jpg
- |-思维导图
- |-01-Java 概述.png
- |-02-Java基础语法.png
- |-03-面向对象.png
- |-面试测试题
- |-aa.java
- |-exam.zip
- |-黑马活动
- |-DVD管理系统----附带代码
- |-DVD管理系统简介.doc
- |-公约数和公倍数---附带代码
- |-gysAndgbs.java
- |-Person.java
- |-sushu.java
- |-公约数,公倍数和素数.doc
- |-员工打卡系统----附带代码
- |-员工打卡系统.doc
- |-打印系统----附带代码
- |-打印系统.doc
- |-提交作业验证系统---附带代码
- |-作业提交验证.doc
- |-算法--迭代和递归---附带代码
- |-方程的解-迭代,递归.doc
- |-方程解---代码.doc
- |-方程解---迭代图.png
- |-阶乘--递归---代码.doc
- |-阶乘运行结果案例.png
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("F:\\黑马");
showDir(file, 0);
}
/* 格式方式 */
public static String show(int level) {
StringBuilder sb = new StringBuilder();
sb.append("|-");
for (int i = 0; i < level; i++) {
sb.insert(0, " ");
}
return sb.toString();
}
/* 利用递归显示 */
public static void showDir(File dir, int level) {
System.out.println(show(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(show(level) + Files[x].getName());
}
}
}
}
结果:
|-heima
|-Game.rar
|-Java常用英语汇总.doc
|-java特性.jpg
|-思维导图
|-01-Java 概述.png
|-02-Java基础语法.png
|-03-面向对象.png
|-面试测试题
|-aa.java
|-exam.zip
|-黑马活动
|-DVD管理系统----附带代码
|-DVD管理系统简介.doc
|-公约数和公倍数---附带代码
|-gysAndgbs.java
|-Person.java
|-sushu.java
|-公约数,公倍数和素数.doc
|-员工打卡系统----附带代码
|-员工打卡系统.doc
|-打印系统----附带代码
|-打印系统.doc
|-提交作业验证系统---附带代码
|-作业提交验证.doc
|-算法--迭代和递归---附带代码
|-方程的解-迭代,递归.doc
|-方程解---代码.doc
|-方程解---迭代图.png
|-阶乘--递归---代码.doc
|-阶乘运行结果案例.png
5. 删除文件夹
思路:
从里向外删除,先删除文加夹中的文件。当文件没了,然后在删除此空文件夹,因为文件夹中有文件的话,删除不了。所以先清除里面的文件。使用的也是递归。
- import java.io.File;
- public class DeleteFileDemo {
- public static void main(String[] args) {
- File file = new File("F:\\heima");
- deleteDir(file);
- }
- public static void deleteDir(File dir) {
- File[] files = dir.listFiles();
- for (int i = 0; i < files.length; i++) {
- if (files[i].isDirectory())
- deleteDir(files[i]);
- else
- System.out.println(files[i].delete());
- }
- System.out.println(dir.delete());
- }
- }
import java.io.File;
public class DeleteFileDemo {
public static void main(String[] args) {
File file = new File("F:\\heima");
deleteDir(file);
}
public static void deleteDir(File dir) {
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory())
deleteDir(files[i]);
else
System.out.println(files[i].delete());
}
System.out.println(dir.delete());
}
}
6. 练习
一个文件夹中的文件路径存到一个文件中,这样可以方便我们查找。
思路:
1. 遍历文件夹中的所有文件,找到我们符合条件的文件,然后存到一个集合中。
2. 遍历此集合,然后存到一个文件中。
- 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 Demo {
- public static void main(String[] args) throws IOException {
- File file= new File("F:\\黑马笔记");
- File filepath = new File("F:\\doc.txt");
- List<File> list = new ArrayList<File>();
- getFile(file,list);
- writerToFile(list, filepath);
- System.out.println("OVER");
- }
- /* 遍历列表,将其存到集合中 */
- public static void getFile(File dir, List<File> listFiles) {
- File[] files = dir.listFiles();
- /* 遍历列表,存到集合中 */
- for (File f : files) {
- if (f.isDirectory()) {
- getFile(f, listFiles);
- } else {
- if (f.getName().endsWith(".doc"))// 判断是否是doc文件
- listFiles.add(f);
- }
- }
- }
- /* 遍历集合,写到文件中 */
- public static void writerToFile(List<File> listFiles, File FilePaths)
- throws IOException {
- BufferedWriter bw = new BufferedWriter(new FileWriter(FilePaths));// 定义的写入流
- /* 遍历集合,把其写到文件中 */
- for (File f : listFiles) {
- bw.write(f.getAbsolutePath());// 将绝对路径写到文件中
- bw.newLine();
- bw.flush();
- }
- bw.close();
- }
- }
- 结果:
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 Demo {
public static void main(String[] args) throws IOException {
File file= new File("F:\\黑马笔记");
File filepath = new File("F:\\doc.txt");
List<File> list = new ArrayList<File>();
getFile(file,list);
writerToFile(list, filepath);
System.out.println("OVER");
}
/* 遍历列表,将其存到集合中 */
public static void getFile(File dir, List<File> listFiles) {
File[] files = dir.listFiles();
/* 遍历列表,存到集合中 */
for (File f : files) {
if (f.isDirectory()) {
getFile(f, listFiles);
} else {
if (f.getName().endsWith(".doc"))// 判断是否是doc文件
listFiles.add(f);
}
}
}
/* 遍历集合,写到文件中 */
public static void writerToFile(List<File> listFiles, File FilePaths)
throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter(FilePaths));// 定义的写入流
/* 遍历集合,把其写到文件中 */
for (File f : listFiles) {
bw.write(f.getAbsolutePath());// 将绝对路径写到文件中
bw.newLine();
bw.flush();
}
bw.close();
}
}
结果:
--------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------