黑马程序员---Java基础---File类
2015-03-26 15:56
316 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一.File类
1.什么是File类
File类代表一个文件或文件夹的路径
File类中的方法都是文件或文件夹的操作
2.绝对路径和相对路径
绝对路径: 从盘符开始的, 完整的路径. 不论在什么环境下运行, 都是找指定的路径.
相对路径: 不从盘符开始, 相对于一个其他路径. Eclipse中相对于工程文件夹, cmd中相对于提示符目录. 运行环境不同, 相对的路径也就不同.
3.构造函数
File(String pathname)
通过指定路径创建一个File对象
File(String parent, Stringchild)
通过指定父级路径和自己路径创建一个File对象
File(File parent, Stringchild)
和上面方法类似, 但父级路径是一个File对象
4.常用方法
String getName()
获取文件名
String getParent()
获取父级路径名
long length()
获取文件大小
long lastModified()
获取最后修改时间
boolean exists()
判断是否存在
boolean isFile()
判断是否是文件
boolean isDirectory()
判断是否是文件夹
boolean renameTo(File dest)
改名
boolean createNewFile()
创建新文件
boolean mkdir()
创建文件夹(不包含父级)
boolean mkdirs()
创建文件夹(包含父级)
boolean delete()
删除
String[] list()
获取文件夹下的所有子文件名(String)
File[] listFiles()
获取文件夹下的所有子文件(File对象)
long getTotalSpace()
返回此抽象路径名指定的分区大小
long getFreeSpace()
返回此抽象路径名指定的分区中未分配的字节数
boolean canExecute()
测试应用程序是否可以执行此抽象路径名表示的文件
boolean canRead()
测试应用程序是否可以读取此抽象路径名表示的文件
boolean canWrite()
测试应用程序是否可以修改此抽象路径名表示的文件
boolean isHidden()
测试此抽象路径名指定的文件是否是一个隐藏文件
boolean setReadable(booleanreadable)
设置此抽象路径名所有者读权限的一个便捷方法
boolean setWritable(booleanwritable)
设置此抽象路径名所有者写权限的一个便捷方法
boolean setExecutable(booleanexecutable)
设置此抽象路径名所有者执行权限的一个便捷方法
二.递归
1.什么是递归
函数自己调用自己就是递归, 有些时候在程序中的工作需要反复调用, 可以使用递归解决, 通常递归调用函数都会有一个退出条件.
三.File类练习
1 .打印指定文件夹下所有以.java结尾的文件
思路:
1. 获取文件夹路径
2. 获取文件夹下所有子文件(File对象)
3. 遍历子文件
4. 判断以.java结尾,且是文件
5. 打印文件名
2.从键盘接收一个文件夹路径,按照最后修改时间排序将该文件夹下的所有.java文件名写入file.txt中, 如果输入的路径不存在,要给予提示, 如果输入的路径不是一个文件夹路径,也要给予提示
思路:
1. 创建输入流接收键盘输入的数据,读取一行
2. 将读取的数据封装成File对象
3. 用if () {…..} else if () {…..} else {…..}语句判断路径是否正确
4. 获取所有子文件名装入File[]中
5. 创建TreeSet集合并传入比较器
6. 将File[]元素传入TreeSet中
7. 创建输出流
8. 遍历TreeSet
9. 判断文件名以.java结尾,并且是文件写出
10. 关输出流
3.将文件夹路径下的所有子文件(包括文件夹)的名字有层次的写入到F:\\file.txt中,并计算文件夹大小
思路:
1. 新建一个DirUtil类用getDir()方法接收键盘输入的文件夹路径,并判断路径是否正确,不正确则提示重新输入,备用
2. 用递归的方式实现将文件夹路径下所有子文件的名字有层次写入F:\\file.txt中
3. 用递归的方式实现计算文件夹大小
4. 从键盘接收一个文件夹路径,将文件夹删除
思路:
1. 用DirUtil.getDir()接收文件夹路径
2. 提示确定删除
3. 获取所有子文件
4. 是文件就删除
5. 是文件夹就递归
6. 删除空文件夹
5. 从键盘接收2个文件夹路径,将第一个文件夹拷贝到第二个文件夹下,注意:2个文件夹路径不能相同,也不能有嵌套关系(会造成无限循环拷贝)
思路:
1. 用DirUtil.getDir()接收2个文件夹路径,目标src, 目的dest
2. 在dest中创建一个和src 同名的文件夹
3. 获取src中的所有子文件
4. 遍历子文件
5. 是文件就直接创建输入输出流拷贝
6. 是文件夹就递归
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一.File类
1.什么是File类
File类代表一个文件或文件夹的路径
File类中的方法都是文件或文件夹的操作
2.绝对路径和相对路径
绝对路径: 从盘符开始的, 完整的路径. 不论在什么环境下运行, 都是找指定的路径.
File f1 = new File("F:/Workspace/EclipseWorkspace/tist/file.txt");
相对路径: 不从盘符开始, 相对于一个其他路径. Eclipse中相对于工程文件夹, cmd中相对于提示符目录. 运行环境不同, 相对的路径也就不同.
File f2 = new File("file.txt");
3.构造函数
File(String pathname)
通过指定路径创建一个File对象
File f3 = new File("src");//文件夹
File(String parent, Stringchild)
通过指定父级路径和自己路径创建一个File对象
String parent1 = "F:/Workspace/EclipseWorkspace/tist/src/it/file"; File f1 = new File(parent1, "FileDemo.java");//指定父级路径和子级路径
File(File parent, Stringchild)
和上面方法类似, 但父级路径是一个File对象
File parent2 = new File("F:/Workspace/EclipseWorkspace/tist/src"); File f2 = new File(parent2, "FileDemo.java");//指定父级路径和子级路径
4.常用方法
String getName()
获取文件名
File f1 = new File("F:/Workspace/EclipseWorkspace/tist/file.txt"); System.out.println(f1.getName()); //获取文件名
String getParent()
获取父级路径名
File f1 = new File("F:/Workspace/EclipseWorkspace/tist/file.txt"); System.out.println(f1.getParent()); //获取父级路径名
long length()
获取文件大小
File f1 = new File("F:/Workspace/EclipseWorkspace/tist/file.txt"); System.out.println("f1文件大小 " + f1.length());//获取文件大小单位字节
long lastModified()
获取最后修改时间
File f1 = new File("F:/Workspace/EclipseWorkspace/tist/file.txt"); System.out.println(new Date(f1.lastModified())); //最后修改时间
boolean exists()
判断是否存在
File f1 = new File("F:/Workspace/EclipseWorkspace/tist/file.txt"); System.out.println("f1是否存在:" + f1.exists());//判断路径是否存在
boolean isFile()
判断是否是文件
File f1 = new File("F:/Workspace/EclipseWorkspace/tist/file.txt"); System.out.println("f1是否是文件:" + f1.isFile());//判断是否是文件
boolean isDirectory()
判断是否是文件夹
File f1 = new File("F:/Workspace/EclipseWorkspace/tist/file.txt"); System.out.println("f1是否是文件夹" + f1.isDirectory());//判断是否是文件夹
boolean renameTo(File dest)
改名
File f1 = new File("F:/Workspace/EclipseWorkspace/tist/file.txt"); f1.renameTo(new File("F:\\file2.txt"));//重命名,改路径(类似剪切)
boolean createNewFile()
创建新文件
File f1 = new File("F:/Workspace/EclipseWorkspace/tist/file.txt"); System.out.println(f1.createNewFile());//创建文件,如果成功返回true
boolean mkdir()
创建文件夹(不包含父级)
File f1 = new File("F:/Workspace/EclipseWorkspace/tist"); System.out.println(f2.mkdir()); //创建文件夹,不能创建多个文件夹
boolean mkdirs()
创建文件夹(包含父级)
File f1 = new File("F:/Workspace/EclipseWorkspace/tist"); System.out.println(f2.mkdirs());//创建文件夹,如果父级路径不存在就一起创建
boolean delete()
删除
File f1 = new File("f.txt"); File f2 = new File("f/e/a"); File f3 = new File("f"); System.out.println(f1.delete());//删除文件成功返回true System.out.println(f2.delete());//删除文件夹成功返回true System.out.println(f3.delete());//删除文件夹,里面有文件或文件夹,都不能删除
String[] list()
获取文件夹下的所有子文件名(String)
File file = new File("F:/Workspace/EclipseWorkspace/tist/src/it/file"); String[] nameArr = file.list(); //获取文件夹下所有子文件(包括文件夹)的文件名
File[] listFiles()
获取文件夹下的所有子文件(File对象)
File file = new File("F:/Workspace/EclipseWorkspace/tist/src/it/file"); File[] nameArr = file.listFiles(); //获取file下所有子文件(File对象)
long getTotalSpace()
返回此抽象路径名指定的分区大小
File file = new File("F:/Workspace/EclipseWorkspace/tist/src/it/file"); System.out.println("文件所在盘符总空间" + f1.getTotalSpace());
long getFreeSpace()
返回此抽象路径名指定的分区中未分配的字节数
File file = new File("F:/Workspace/EclipseWorkspace/tist/src/it/file"); System.out.println("文件所在盘符剩余空间" + f1.getFreeSpace());
boolean canExecute()
测试应用程序是否可以执行此抽象路径名表示的文件
File f1 = new File("file.txt"); System.out.println("是否可执行 " + f1.canExecute());
boolean canRead()
测试应用程序是否可以读取此抽象路径名表示的文件
File f1 = new File("file.txt"); System.out.println("是否可读 " + f1.canRead());
boolean canWrite()
测试应用程序是否可以修改此抽象路径名表示的文件
File f1 = new File("file.txt"); System.out.println("是否可写 " + f1.canWrite());
boolean isHidden()
测试此抽象路径名指定的文件是否是一个隐藏文件
File f1 = new File("file.txt"); System.out.println("是否是隐藏的 " + f1.isHidden());
boolean setReadable(booleanreadable)
设置此抽象路径名所有者读权限的一个便捷方法
File f1 = new File("file.txt"); f1.setReadable(true);
boolean setWritable(booleanwritable)
设置此抽象路径名所有者写权限的一个便捷方法
File f1 = new File("file.txt"); f1.setWritable(false);//设置为只读
boolean setExecutable(booleanexecutable)
设置此抽象路径名所有者执行权限的一个便捷方法
File f1 = new File("file.txt"); f1.setExecutable(true);
二.递归
1.什么是递归
函数自己调用自己就是递归, 有些时候在程序中的工作需要反复调用, 可以使用递归解决, 通常递归调用函数都会有一个退出条件.
三.File类练习
1 .打印指定文件夹下所有以.java结尾的文件
思路:
1. 获取文件夹路径
2. 获取文件夹下所有子文件(File对象)
3. 遍历子文件
4. 判断以.java结尾,且是文件
5. 打印文件名
public static void demo6() { File file = new File("F:/Workspace/EclipseWorkspace/tist/src/it/file"); File[] nameArr = file.listFiles(); //获取file下所有子文件(File对象) for (File name : nameArr) //遍历子文件 if (name.getName().endsWith(".java") && name.isFile()) //判断文件名以.java结尾,并且是文件 System.out.println(name.getName()); //打印文件名 } public static void demo5() { File file = new File("F:/Workspace/EclipseWorkspace/tist/src/it/file"); String[] nameArr = file.list(); //获取文件夹下所有子文件(包括文件夹)的文件名 for (String name : nameArr) { //遍历文件名 File f = new File(file, name); //封装成File对象 if (name.endsWith(".java") && file.isFile()) //判断文件名以.java结尾,并且是文件 System.out.println(name); } }
2.从键盘接收一个文件夹路径,按照最后修改时间排序将该文件夹下的所有.java文件名写入file.txt中, 如果输入的路径不存在,要给予提示, 如果输入的路径不是一个文件夹路径,也要给予提示
思路:
1. 创建输入流接收键盘输入的数据,读取一行
2. 将读取的数据封装成File对象
3. 用if () {…..} else if () {…..} else {…..}语句判断路径是否正确
4. 获取所有子文件名装入File[]中
5. 创建TreeSet集合并传入比较器
6. 将File[]元素传入TreeSet中
7. 创建输出流
8. 遍历TreeSet
9. 判断文件名以.java结尾,并且是文件写出
10. 关输出流
package it.file; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.util.Collections; import java.util.Comparator; import java.util.TreeSet; public class Exercise1 { public static void main(String[] args) throws IOException { // 1.从键盘接收一个文件夹路径,将该文件夹下的所有.java文件名写入F:\file.txt中 System.out.println("请输入一个文件夹路径"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//标准输入流虚拟机自动关流 String line = br.readLine(); File dir = new File(line);//封装成File对象 // 2.如果输入的路径不存在,要给予提示,如果输入的路径不是文件夹路径,也要给予提示 if (!dir.exists()) System.out.println("路径不存在。"); else if (!dir.isDirectory()) System.out.println("您输入的不是文件夹路径"); else { File[] nameArr = dir.listFiles();//获取子文件名装入File[]中 // 3.写入的文件名按最后修改时间排序 TreeSet<File> set = new TreeSet<File>(new Comparator<File>() { public int compare(File o1, File o2) { int x; if (o1.lastModified() > o2.lastModified()) x = 1; else if (o1.lastModified() < o2.lastModified()) x = -1; else x = 0; return x != 0 ? x : o1.compareTo(o2);//按最后修改时间排序,相同按名字排序 } });//按特定顺序排序传入比较器,重写compare方法 Collections.addAll(set, nameArr);//将File[]的元素传入set中 BufferedWriter bw = null; try { bw = new BufferedWriter(new FileWriter("F:\\file.txt")); for (File file : set) if (file.isFile() && file.getName().endsWith(".java")) {//判断文件名以.java结尾,并且是文件 bw.write(file.getName()); bw.newLine(); } } finally { bw.close(); } } } }
3.将文件夹路径下的所有子文件(包括文件夹)的名字有层次的写入到F:\\file.txt中,并计算文件夹大小
思路:
1. 新建一个DirUtil类用getDir()方法接收键盘输入的文件夹路径,并判断路径是否正确,不正确则提示重新输入,备用
2. 用递归的方式实现将文件夹路径下所有子文件的名字有层次写入F:\\file.txt中
3. 用递归的方式实现计算文件夹大小
package it.file; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; /** * 从键盘接收一个文件夹路径 * 如果路径不存在,给予提示,并且重新输入 * 如果不是文件夹路径,给予提示,并且重新输入 * @author panbin * */ public class DirUtil { public static File getDir() throws IOException { //从键盘接收一个文件夹路径 System.out.println("请输入一个文件夹路径:"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while (true) { File dir = new File(br.readLine()); if (!dir.exists()) //如果路径不存在,给予提示,并且重新输入 System.out.println("您输入的路径不存在,请重新输入:"); else if (!dir.isDirectory()) //如果不是文件夹路径,给予提示,并且重新输入 System.out.println("您输入的不是 文件夹路径,请重新输入:"); else return dir; } } }
package it.file; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; public class Exercise3 { public static void main(String[] args) throws IOException { //从键盘接收一个文件夹路径 File dir = DirUtil.getDir(); //创建输出流,不要在方法中创建,因为递归时会因重新创建而清空 BufferedWriter bw = new BufferedWriter(new FileWriter("F:\\file.txt")); printFileName(dir, bw, 0); bw.close(); System.out.println(getLength(dir));//统计文件夹大小 } /** * 将文件夹路径下的所有子文件(包括文件夹)的名字有层次的写入到F:\\file.txt中 * @param dir 文件夹路径 * @param bw 输出流 * @param lv 层次 * @throws IOException */ public static void printFileName(File dir, BufferedWriter bw, int lv) throws IOException { //将路径下的所有子文件(包括文件夹)的名字写入到F:\\file.txt中 File[] fileArr = dir.listFiles(); //获取所有子文件 for (File file : fileArr) { //循环遍历每个子文件 for (int i = 0; i < lv; i++) //按照层次循环 bw.write("\t"); //输出前面的Tab bw.write(file.getName()); //写出文件名 bw.newLine(); //换行 if (file.isDirectory()) { //如果是文件夹 printFileName(file, bw, lv + 1);//再打印这个文件夹下所有子文件 } } } /** * 统计文件夹大小 * @param dir 要统计的文件夹 * @return 大小 */ public static long getLength(File dir) { long len = 0; //用来统计大小 File[] fileArr = dir.listFiles(); //获取所有子文件 for (File file : fileArr) //循环遍历每个子文件 // if (file.isFile()) //如果是文件统计文件大小 // len += file.length(); //累计文件大小 // else // len += getLength(file); //如果是文件夹递归累计子文件夹大小 len += file.isFile() ? file.length() : getLength(file); return len; } }
4. 从键盘接收一个文件夹路径,将文件夹删除
思路:
1. 用DirUtil.getDir()接收文件夹路径
2. 提示确定删除
3. 获取所有子文件
4. 是文件就删除
5. 是文件夹就递归
6. 删除空文件夹
package it.file; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; public class Exercise4 { public static void main(String[] args) throws IOException { File dir = DirUtil.getDir(); //从键盘接收一个文件夹路径 System.out.println("请问确定要删除\"" + dir.getAbsolutePath() + "\"吗(Y/N)"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = br.readLine(); if (line.equalsIgnoreCase("Y")) deleteDir(dir); //删除文件夹 System.out.println("文件夹已删除!"); } private static void deleteDir(File dir) { File[] fileArr = dir.listFiles(); //获取所有子文件 for (File file : fileArr) //循环遍历 if (file.isFile()) //如果是文件就删除 file.delete(); else //如果是文件夹就递归 deleteDir(file); dir.delete(); //删除文件夹 } }
5. 从键盘接收2个文件夹路径,将第一个文件夹拷贝到第二个文件夹下,注意:2个文件夹路径不能相同,也不能有嵌套关系(会造成无限循环拷贝)
思路:
1. 用DirUtil.getDir()接收2个文件夹路径,目标src, 目的dest
2. 在dest中创建一个和src 同名的文件夹
3. 获取src中的所有子文件
4. 遍历子文件
5. 是文件就直接创建输入输出流拷贝
6. 是文件夹就递归
package it.file; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Exercise6 { public static void main(String[] args) throws IOException { File src = DirUtil.getDir(); //从键盘接收一个文件夹路径 File dest = DirUtil.getDir(); //从键盘接收另一个不同的文件夹路径 // copyDir(src, dest); //将第一个文件夹中的内容拷贝到第二个文件夹中 } /** * 拷贝文件夹(包括子文件夹)注意:路径不要相同避免形成递归 * @param src 目标文件夹 * @param dest 目的文件夹 * @throws IOException */ private static void copyDir(File src, File dest) throws IOException { File newDir = new File(dest, src.getName());//指定父级路径和子级路径 newDir.mkdir(); //在dest文件夹中创建与src同名的文件夹 File[] fileArr = src.listFiles(); //获取src中所有子文件 for (File file : fileArr) { //循环遍历子文件 if (file.isFile()) { //如果是文件就拷贝 FileInputStream fis = new FileInputStream(file); //创建输入流 FileOutputStream fos = new FileOutputStream(newDir);//创建输出流 byte[] buffer = new byte[8192]; //定义数组用来当做缓冲区 int len; //定义变量,用来记住每次拷贝的个数 while ((len = fis.read(buffer)) != -1) // 从流中读取数据到Buffer中,len记住读取个数 fos.write(buffer, 0, len); // 将buffer中的数据写出,写出len个 fis.close(); //关闭输入流 fos.close(); //关闭输出流 } else //如果是文件夹就递归 copyDir(file, newDir); } } }
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
相关文章推荐
- 黑马程序员___16java基础 File类 递归 打印流
- 黑马程序员--java基础--File类
- 黑马程序员——Java基础---异常,IO流,File类
- 黑马程序员—Java基础—File类
- 黑马程序员 java基础24天 IO流--File类
- 黑马程序员——Java基础---IO(二)--File类、Properties类、打印流、序列流(合并流)
- 黑马程序员——Java基础---IO、File类、Properties类、打印流、序列流(合并流)
- 黑马程序员---Java基础---异常、File类和递归
- 黑马程序员——Java基础---IO(二)--File类、Properties类、打印流、序列流(合并流)
- 黑马程序员——【Java基础】——File类、Properties集合、IO包中的其他类
- 黑马程序员--java基础:File类和文件字节IO流
- 黑马程序员java基础之io流中的File类
- 黑马程序员——Java基础IO流概述、字符流、字节流、流操作规律、File类、Properties类、打印流、序列流
- 黑马程序员--java基础9--File类
- 黑马程序员————java基础--------IO输入输出之异常、File类和递归
- Java基础---IO(二)--File类、Properties类、打印流、序列流(合并流) (黑马程序员)
- 黑马程序员—java基础_File类
- 黑马程序员——Java基础——IO流的File类
- 黑马程序员——Java基础---IO(三)--File类、Properties类、打印流、序列流(合并流)
- 黑马程序员--java基础--File类、Properties类、打印流、序列流