一.练习的题目

(一) 在电脑D盘下创建一个文件为HelloWorld.txt文件,判断他是文件还是目录,在创建一个目
录IOTest,之后将HelloWorld.txt移动到IOTest目录下去;之后遍历IOTest这个目录下的文

(二) 递归实现输入任意目录,列出文件以及文件夹,效果看图

(三) 递归实现列出当前工程下所有.java文件

(四)从磁盘读取一个文件到内存中,再打印到控制台

(五) 在程序中写一个"HelloJavaWorld你好世界"输出到操作系统文件Hello.txt文件中

(六) 拷贝一张图片,从一个目录到另外一个目录下(PS:是拷贝是不是移动)

(七) 统计一个文件calcCharNum.txt(见附件)中字母'A'和'a'出现的总次数

(八)统计一个文件calcCharNum.txt(见附件)中各个字母出现次数:

A(8),B(16),C(10)...,a(12),b(10),c(3)....,括号内代表字符出现次数;

(九)统计一个文件calcCharNum2.txt(见附件)中各个字母出现次数:
A(8),B(16),C(10)...,a(12),b(10),c(3)....中(5),国(6),括号内代表字符出现次数;

(十) 使用随机文件流类RandomAccessFile将一个文本文件倒置读出。

(十一) 编写一个Java应用程序,可以实现Dos中的type命令,并加上行号。

即将文本文件在控制台上显示出来,并在每一行的前面加上行号。

(十二)输入两个文件夹名称,将A文件夹内容全部拷贝到B文件夹,要求使用多线程来操作。

(十三)查看D盘中所有的文件和文件夹名称,并且使用名称升序降序,文件夹在前和文件夹在
后,文件大小排序等。

二.详细的解题过程

(一)第一题

  1. package com.xykj.lesson1;
  2. import java.io.File;
  3. import java.io.IOException;
  4. public class Test1 {
  5. /**
  6. * 1. 在电脑D盘下创建一个文件为HelloWorld.txt文件,
  7. * 判断他是文件还是目录,再创建一个目录IOTest,
  8. * 之后将HelloWorld.txt移动到IOTest目录下去;
  9. * 之后遍历IOTest这个目录下的文件
  10. *
  11. * 程序分析:
  12. * 1、文件创建使用File的createNewFile()方法
  13. * 2、判断是文件用isFile(),判断是目录用isDirectory
  14. * 3、创建目录用:mkdirs()方法
  15. * 4、移动文件用:renameTo
  16. * 5、遍历目录用:list()方法获得存放文件的数组,foreach遍历的方法把文件打印出来
  17. * */
  18. public static void main(String[] args) {
  19. //在电脑D盘下创建一个文件为HelloWorld.txt文件
  20. File file=new File("D:","HelloWorld.txt");
  21. //创建文件,返回一个布尔值
  22. boolean isCreate;
  23. try {
  24. isCreate = file.createNewFile();
  25. if (isCreate) {
  26. System.out.println("创建文件成功!");
  27. }else {
  28. System.out.println("创建文件失败!文件已经存在");
  29. }
  30. } catch (IOException e) {
  31. System.out.println("创建文件失败!");
  32. }
  33. // 判断他是文件还是目录,
  34. if (file.isFile()) {
  35. System.out.println("这是一个文件");
  36. } else {
  37. System.out.println("这是一个目录");
  38. }
  39. //再创建一个目录IOTest
  40. File file2=new File("D:/IOTest");
  41. file2.mkdirs();
  42. //HelloWorld.txt移动到IOTest目录下去?失败?》
  43. if (file.renameTo(file2)) {
  44. System.out.println("文件移动成功!");
  45. } else {
  46. System.out.println("文件移动失败");
  47. }
  48. //遍历IOTest目录下的文件
  49. String[] arr=file2.list();
  50. for (String string : arr) {
  51. System.out.println(string);
  52. }
  53. }
  54. }

//上面移动文件要指明文件路径和文件名

上面的file.renameTo(file2)改为:

file.renameTo(file2.getPath + "/" + file.getName());

就不会有错了。

(二)第二题

1.先建一个FileUtile工具类

  1. package com.xykj.lesson2;
  2. import java.io.File;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. /**
  6. * 这是一个获取目录下所有文件夹内的所有文件的封装类
  7. * 当然前提是你要传进来一个正确路径的文件夹
  8. * */
  9. public class FileUtils {
  10. //获取文件夹下所有的文件
  11. public static List<file> getAllFiles(String dir){
  12. //创建一个集合存放遍历到的File
  13. List< File >files=new ArrayList<file>();
  14. File file=new File(dir);
  15. //文件夹必须存在                并且要是文件夹
  16. if (file.exists()&&file.isDirectory()) {
  17. //重点!    这里要本身一直遍历
  18. longErgodic(file,files);//把遍历得到的东西存放在files里面
  19. }
  20. return files;
  21. }
  22. //重点理解,这是一个递归方法,会不断来回调用本身,但是所有获得的数据都会存放在集合files里面
  23. private static void longErgodic(File file, List<file> files) {
  24. //.listFiles()方法的使用
  25. //把文件夹的所有文件(包括文件和文件名)都放在一个文件类的数组里面
  26. File[] fillArr=file.listFiles();
  27. //如果是一个空的文件夹
  28. if (fillArr==null) {
  29. //后面的不执行,直接返回
  30. return;
  31. }
  32. //如果文件夹有内容,遍历里面的所有文件(包括文件夹和文件),都添加到集合里面
  33. for (File file2 : fillArr) {
  34. //如果只是想要里面的文件或者文件夹或者某些固定格式的文件可以判断下再添加
  35. files.add(file2);
  36. //添加到集合后,在来判断是否是文件夹,再遍历里面的所有文件
  37. //方法的递归
  38. longErgodic(file2, files);
  39. }
  40. }
  41. }
  42. </file></file></file>

2.再建一个主方法调用类

  1. package com.xykj.lesson2;
  2. import java.io.File;
  3. import java.util.List;
  4. public class Test2 {
  5. /**
  6. * 递归实现输入任意目录,列出文件以及文件夹
  7. *
  8. * 设计:在FileUtils类里面实现了逻辑操作,在另一边调用就可以了
  9. * */
  10. public static void main(String[] args) {
  11. //比如输入D盘
  12. List<file>list=FileUtils.getAllFiles("D:");
  13. //输出所有的文件和文件夹的名字
  14. for (File file : list) {
  15. System.out.println(file);
  16. }
  17. }
  18. }
  19. </file>

(三)第三题

  1. package com.xykj.lesson3;
  2. import java.io.File;
  3. import java.util.List;
  4. import com.xykj.lesson2.FileUtils;
  5. public class Test3 {
  6. /**
  7. * 递归实现列出当前工程下所有.java文件
  8. * 还是要题目2的遍历文件的工具类来获取所有的文件,再过滤.java文件就可以了
  9. * 当前目录的地址:输入.就可以获取
  10. * */
  11. public static void main(String[] args) {
  12. //输入.  获取当前文件的 所有文件
  13. List<file>list=FileUtils.getAllFiles(".");
  14. //输出.java后缀的文件的名字
  15. for (File file : list) {
  16. if (file.toString().endsWith(".java")) {
  17. System.out.println(file.getName());
  18. }
  19. }
  20. }
  21. }
  22. </file>

(四)第四题

  1. package com.xykj.lesson4;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. public class Tset4 {
  5. /**
  6. * 从磁盘读取一个文件到内存中,再打印到控制台
  7. *
  8. * 程序设计:
  9. * 1、读取文件用到FileinputSteam
  10. * 2、把读取的内容不断加入到StringBuffer,
  11. * 3、再把StringBuffer打印出来就可以
  12. * */
  13. public static void main(String[] args) {
  14. // 读取D:\notePad\aa.txt里面的内容
  15. File file = new File("D:\\notePad\\aa.txt");
  16. try {
  17. // 创建读取流即输入流
  18. FileInputStream fis = new FileInputStream(file);
  19. int len = 0;
  20. byte[] buf = new byte[1024];
  21. StringBuffer sb = new StringBuffer();
  22. // 把读取的数据添加到StringBuffer里面
  23. while ((len = fis.read(buf)) != -1) {
  24. sb.append(new String(buf, 0, len));
  25. }
  26. // 把StringBuffer里面的内容打印出来
  27. System.out.println(sb);
  28. fis.close();
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. }
  32. }
  33. }

(五)第五题

  1. package com.xykj.lesson5;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. public class Test5 {
  5. /**
  6. * 在程序中写一个"HelloJavaWorld你好世界"输出到操作系统文件Hello.txt文件中
  7. *
  8. * 程序分析:文件写入,要用到输出流FileOutputStream
  9. * */
  10. public static void main(String[] args) {
  11. // 向文件D:/Hello.txt,写入内容
  12. File file = new File("D:/Hello.txt");
  13. try {
  14. // 创建输出流
  15. FileOutputStream fos = new FileOutputStream(file);
  16. //把String类型的字符串转化为byte数组的数据保存在输出流中
  17. fos.write("HelloJavaWorld你好世界".getBytes());
  18. fos.flush();//刷新输出流
  19. fos.close();//关闭输出流
  20. } catch (Exception e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. }

(六)第六题

  1. package com.xykj.lesson6;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. public class Test6 {
  6. /**
  7. * 拷贝一张图片,从一个目录到另外一个目录下(PS:是拷贝是不是移动)
  8. *
  9. * 程序设计思路:
  10. *  这题不能使用renameTo,
  11. *  解题步骤:
  12. * 1、在目的地址创建一个图片文件
  13. * 2、读取源地址文件的字节流
  14. * 3、把读取到的字节流写入到目的地址的文件里面
  15. * 4、刷新输出流,并关闭就可以了
  16. *
  17. * @throws Exception
  18. * */
  19. public static void main(String[] args) {
  20. // 本题示范把D盘下的mm.jpg复制到D盘java文件夹里面
  21. // 源文件地址
  22. File fileFrom = new File("D:/mm.jpg");
  23. // 目的文件地址
  24. File fileTo = new File("D:/java/mm.jpg");
  25. // 1、创建目的文件地址
  26. try {
  27. if (!fileTo.createNewFile()) {
  28. System.out.println("创建文件失败!");
  29. }
  30. // 2、读取源地址文件的字节流
  31. FileInputStream fis = new FileInputStream(fileFrom);
  32. FileOutputStream fos = new FileOutputStream(fileTo);
  33. int len = 0;
  34. byte[] buf = new byte[1024];
  35. while ((len = fis.read(buf)) != -1) {
  36. // 3、把读取到的字节流写入到目的地址的文件里面
  37. fos.write(buf, 0, len);
  38. }
  39. // 刷新下输出流
  40. fos.flush();
  41. // 关闭输入流和输出流
  42. fis.close();
  43. fos.close();
  44. System.out.println("文件复制成功!");
  45. } catch (Exception e) {
  46. e.printStackTrace();
  47. }
  48. }
  49. }

(七)第七题

  1. package com.xykj.lesson7;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. public class Test7 {
  5. /**
  6. * 统计一个文件calcCharNum.txt(见附件)中字母'A'和'a'出现的总次数
  7. *
  8. * 程序分析:
  9. * 读取文件用FileInputStream
  10. * 一次只读一个字节(一个字母就是一个字节),当字节内容和A或a相等时,相应的数量加1
  11. * */
  12. public static void main(String[] args) {
  13. try {
  14. //添加文件路径
  15. File file = new File("D:/java/calcCharNum.txt");
  16. //创建文件读取流
  17. FileInputStream fis = new FileInputStream(file);
  18. int numA = 0;//字母A的数量
  19. int numa = 0;//字母a的数量
  20. int len = 0;//每次读取的字节数量
  21. while ((len=fis.read())!= -1) {
  22. //统计字母a的数量
  23. if (new String((char)len+"").equals("a")) {
  24. numa++;
  25. }
  26. //统计字母A的数量
  27. if (new String((char)len+"").equals("A")) {
  28. numA++;
  29. }
  30. }
  31. //打印出文件内字母的数量
  32. System.out.println("a的数量是:"+numa);
  33. System.out.println("A的数量是:"+numA);
  34. System.out.println("a和A出现的总次数:"+(numA+numa));
  35. fis.close();//关闭输入流
  36. } catch (Exception e) {
  37. e.printStackTrace();
  38. }
  39. }
  40. }

(八)第八题

  1. package com.xykj.lesson8;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.util.HashMap;
  5. import java.util.Iterator;
  6. import java.util.Map.Entry;
  7. public class Test8 {
  8. /**
  9. * 统计一个文件calcCharNum.txt(见附件)中各个字母出现次数:
  10. * A(8),B(16),C(10)...,a(12),b(10),c(3)....,括号内代表字符出现次数;
  11. *
  12. * 程序分析:
  13. * 1.这里没中文字符,依然可以只用字节流来读取文件
  14. * 2.不能保存相同的主键值,可以使用HashMap:key-value来实现
  15. * 3.先获得该key的value,如果存在key的话value的值加1
  16. * */
  17. public static void main(String[] args) {
  18. // 文件路径
  19. File file = new File("D:/java/calcCharNum.txt");
  20. try {
  21. // 创建读取文件的输入流
  22. FileInputStream fis = new FileInputStream(file);
  23. // 创建集合HashMap类存放要保存的key-value
  24. HashMap<string, integer=""> map = new HashMap<>();
  25. // 读取文件
  26. int len = 0;// 每次读取的文件长度
  27. int count = 0;
  28. while ((len = fis.read()) != -1) {
  29. // 每次获取到的字母
  30. char c = (char) len;
  31. //这里使用try catch是因为 map.get(c + ""),第一次get不到东西会出现空指针
  32. try {
  33. // 通过每次的key值获取它的value值,
  34. // 但是在它的key值没有时或报空指针错误,所以要try catch处理
  35. // 当她有key值,就可以获取到相应的value值
  36. count = map.get(c + "");
  37. } catch (Exception e) {// 什么都不用输出
  38. }
  39. // 如果有它的key值对应的value值要加1
  40. map.put(c + "", count + 1);
  41. }
  42. fis.close();
  43. // 读完后把结果打印出来
  44. //迭代器的使用
  45. Iterator<entry<string, integer="">> iterator = map.entrySet().iterator();
  46. while (iterator.hasNext()) {
  47. Entry<string, integer=""> entry = iterator.next();
  48. System.out.print(entry.getKey() + "(" + entry.getValue()+ ") \t");
  49. }
  50. } catch (Exception e) {
  51. e.printStackTrace();
  52. }
  53. }
  54. }
  55. </string,></entry<string,></string,>

其实本题也可以直接用字符流来读取的。

(九)第九题

  1. package com.xykj.lesson9;
  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileReader;
  5. import java.io.FileWriter;
  6. import java.util.HashMap;
  7. import java.util.Iterator;
  8. import java.util.Map.Entry;
  9. public class Test9 {
  10. /**
  11. * 统计一个文件calcCharNum2.txt(见附件)中各个字母出现次数:
  12. * A(8),B(16),C(10)...,a(12),b(10),c(3)....中(5),国(6),
  13. * 括号内代表字符出现次数;
  14. *
  15. * 程序分析:
  16. * 1.这出现中文字符,依然只能用字符流来读取文件
  17. * 2.不能保存相同的主键值,可以使用HashMap:key-value来实现
  18. * 3.先获得该key的value,如果存在key的话value的值加1
  19. * */
  20. public static void main(String[] args) {
  21. // 文件路径
  22. File file = new File("D:/java/calcCharNum2.txt");
  23. // 创建集合HashMap类存放要保存的key-value
  24. HashMap<string, integer=""> map = new HashMap<>();
  25. try {
  26. // 创建字符流
  27. FileReader fr = new FileReader(file);
  28. // 每次读取的字符长度
  29. int len = 0;
  30. int count=0;//出现该字符的次数
  31. while ((len = fr.read()) != -1) {
  32. // 获取对应的字符
  33. char c = (char) len;
  34. try {
  35. // 通过每次的key值获取它的value值,
  36. // 但是在它的key值没有时或报空指针错误,所以要try catch处理
  37. // 当她有key值,就可以获取到相应的value值
  38. count = map.get(c + "");
  39. } catch (Exception e) {// 什么都不用输出
  40. }
  41. // 如果有它的key值对应的value值要加1
  42. map.put(c + "", count + 1);
  43. }
  44. // 读完后把结果打印出来
  45. Iterator<entry<string, integer="">> iterator = map.entrySet().iterator();
  46. //迭代器的使用
  47. while (iterator.hasNext()) {
  48. Entry<string, integer=""> entry = iterator.next();
  49. System.out.print(entry.getKey() + "(" + entry.getValue()+ ") \t");
  50. }
  51. } catch (Exception e) {
  52. e.printStackTrace();
  53. }
  54. }
  55. }
  56. </string,></entry<string,></string,>

(十)第十题

 

  1. package com.xykj.lesson10;
  2. import java.io.File;
  3. import java.io.RandomAccessFile;
  4. public class Test10 {
  5. /**
  6. * 使用随机文件流类RandomAccessFile将一个文本文件倒置读出。
  7. *
  8. * 程序分析:
  9. *  RandomAccessFile的seek方法能把读取文件的光标移动到具体的位置
  10. * 但是还是有地点值得注意的是一个字母或数字是占用一个字节的, 一个汉字是占用两个字节的
  11. * */
  12. public static void main(String[] args) {
  13. // 要读取的文件的地址
  14. File file = new File("D:/java/calcCharNum2.txt");
  15. try {
  16. RandomAccessFile raf = new RandomAccessFile(file, "r");
  17. long length = raf.length();
  18. StringBuffer sb = new StringBuffer();
  19. while (length > 0) {
  20. length--;
  21. raf.seek(length);
  22. int c = (char) raf.readByte();
  23. // 如果asc码<=255,>=0,则判断是个英文字符,添加到字符串中.
  24. if (c >= 0 && c <= 255) {
  25. sb.append((char) c);
  26. } else {
  27. // 如果不在asc码范围内,则判断是个汉字字符
  28. // 汉字字符是占2个字节的,所以length再退一个字节
  29. length--;
  30. raf.seek(length);
  31. byte[] cc = new byte[2];
  32. // cc被复制为文件中连续的两个字节
  33. raf.readFully(cc);
  34. sb.append(new String(cc));
  35. }
  36. }
  37. System.out.println(sb);
  38. raf.close();
  39. } catch (Exception e) {
  40. e.printStackTrace();
  41. }
  42. }
  43. }
 
 

(十一)第十一题

  1. package com.xykj.lesson1;
  2. import java.io.File;
  3. import java.io.IOException;
  4. public class Test1 {
  5. /**
  6. * 1. 在电脑D盘下创建一个文件为HelloWorld.txt文件,
  7. * 判断他是文件还是目录,再创建一个目录IOTest,
  8. * 之后将HelloWorld.txt移动到IOTest目录下去;
  9. * 之后遍历IOTest这个目录下的文件
  10. *
  11. * 程序分析:
  12. * 1、文件创建使用File的createNewFile()方法
  13. * 2、判断是文件用isFile(),判断是目录用isDirectory
  14. * 3、创建目录用:mkdirs()方法
  15. * 4、移动文件用:renameTo
  16. * 5、遍历目录用:list()方法获得存放文件的数组,foreach遍历的方法把文件打印出来
  17. * */
  18. public static void main(String[] args) {
  19. //在电脑D盘下创建一个文件为HelloWorld.txt文件
  20. File file=new File("D:","HelloWorld.txt");
  21. //创建文件,返回一个布尔值
  22. boolean isCreate;
  23. try {
  24. isCreate = file.createNewFile();
  25. if (isCreate) {
  26. System.out.println("创建文件成功!");
  27. }else {
  28. System.out.println("创建文件失败!文件已经存在");
  29. }
  30. } catch (IOException e) {
  31. System.out.println("创建文件失败!");
  32. }
  33. // 判断他是文件还是目录,
  34. if (file.isFile()) {
  35. System.out.println("这是一个文件");
  36. } else {
  37. System.out.println("这是一个目录");
  38. }
  39. //再创建一个目录IOTest
  40. File file2=new File("D:/IOTest");
  41. file2.mkdirs();
  42. //HelloWorld.txt移动到IOTest目录下去?失败?》
  43. if (file.renameTo(file2)) {
  44. System.out.println("文件移动成功!");
  45. } else {
  46. System.out.println("文件移动失败");
  47. }
  48. //遍历IOTest目录下的文件
  49. String[] arr=file2.list();
  50. for (String string : arr) {
  51. System.out.println(string);
  52. }
  53. }
  54. }

(十二)第十二题

  1. package com.xykj.lesson12;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.util.List;
  7. import java.util.Scanner;
  8. import java.util.concurrent.ExecutorService;
  9. import java.util.concurrent.Executors;
  10. import com.xykj.lesson2.FileUtils;
  11. public class Test12 {
  12. /*
  13. * 输入两个文件夹名称,将A文件夹内容全部拷贝到B文件夹,要求使用多线程来操作。
  14. *
  15. * 程序分析:
  16. * 1.拷贝文件里面的东西,要分析的东西还是蛮多的,要先建文件夹再拷贝里面的东西,而且要一层层的来搞
  17. * 2.这里也需要文件遍历工具,直接调用第二题的工具类,不再重写
  18. * 3.多线程的使用,可以直接在方法里面直接新建线程
  19. * 4.对整个文件夹进行复制 文件夹分隔符可以用\\或/,其他的都是不对的
  20. * 所有其中还对输入的分割符进行了替换
  21. * 这题看起来比较长,分开看其实也不长
  22. * */
  23. public static void main(String[] args) {
  24. Scanner scanner=new Scanner(System.in);
  25. System.out.println("要复制的文件夹:");
  26. String fromDir = scanner.next();// 接收输入
  27. System.out.println("要复制到哪里去:");
  28. String toDir = scanner.next();// 接收输入
  29. // 把输入的地址转化为File类型
  30. File fromFile = new File(fromDir);
  31. File toFile = new File(toDir);
  32. //新建线程
  33. new Thread(){
  34. //里面做实际操作
  35. public void run() {
  36. // 判断如果要复制的是文件,直接复制就可以了
  37. if (fromFile.isFile()) {
  38. System.out.println("复制单个文件");
  39. copy(fromFile, toFile);
  40. } else {
  41. // 要复制文件夹
  42. // 要防止一种无法进行的复制:比如说,要把复制的文件复制到自己的子文件夹里面
  43. // 举个例子:把D:/java/jsp文件夹复制到D:/java/jsp/js文件夹里面,
  44. // 这会导致子文件不断增加的同时,而父文件也要不断增加,的一个死循环
  45. // 如果反过来,就没事,相当于只是简单的覆盖而已
  46. // 具体实现就是看:目的地地址包含复制的文件夹地址,就不允许操作
  47. if (toDir.replace("/", "\\").toLowerCase()
  48. .startsWith(fromDir.replace("/", "\\").toLowerCase())) {
  49. return;
  50. }
  51. // 复制文件(包括文件和文件夹)操作
  52. // 先获取所有的文件(包括文件和文件夹)
  53. List<file> list = FileUtils.getAllFiles(fromDir);
  54. // 创建一个线程池,加快复制的速度
  55. ExecutorService threadPool = Executors.newFixedThreadPool(20);
  56. // 需要对每一个文件的路径进行处理
  57. for (File file : list) {
  58. // 复制文件名
  59. String name = file.getAbsolutePath();
  60. // 把原来的文件路径换成新的文件路径
  61. String toName = name.replace(fromFile.getParent(), toDir + "/");
  62. System.out.println(name + "变成了" + toName);
  63. // 如果是文件夹,直接创建
  64. if (file.isDirectory()) {
  65. new File(toName).mkdirs();
  66. } else {
  67. // 如果是文件,在线程里面复制
  68. threadPool.execute(new Runnable() {
  69. @Override
  70. public void run() {
  71. File copyFile = new File(toName);
  72. // 先要有父文件夹
  73. copyFile.getParentFile().mkdirs();
  74. // 开始复制文件
  75. copy(file, copyFile);
  76. }
  77. });
  78. }
  79. }
  80. }
  81. scanner.close();
  82. };
  83. }.start();//开始线程
  84. }
  85. //复制文件的操作
  86. public static void copy(File fromFile, File toFile) {
  87. // 定义一个输入流
  88. FileInputStream fis = null;
  89. // 定义一个输出流
  90. FileOutputStream fos = null;
  91. try {
  92. // 把复制地址的File,封装后赋值给输入流对象
  93. fis = new FileInputStream(fromFile);
  94. // 把目的地的File,封装后复制给输出流的对象
  95. fos = new FileOutputStream(toFile);
  96. // 创建一个容量,
  97. byte[] buf = new byte[1024];
  98. // 每次读取/写入的字节长度
  99. int len = 0;
  100. // 边读边写
  101. while ((len = fis.read(buf)) != -1) {// 判断是否还能读到数据
  102. // 把输入放到输出流里面
  103. fos.write(buf, 0, len);
  104. }
  105. } catch (Exception e) {
  106. e.printStackTrace();
  107. } finally {
  108. try {
  109. // 关闭输入流和输出流
  110. fis.close();
  111. fos.close();
  112. } catch (IOException e) {
  113. e.printStackTrace();
  114. }
  115. }
  116. }
  117. }
  118. </file>

(十三)第十三题

  1. package com.xykj.lesson13;
  2. import java.io.File;
  3. import java.util.Collections;
  4. import java.util.Comparator;
  5. import java.util.List;
  6. import com.xykj.lesson2.FileUtils;
  7. public class Test13 {
  8. /**
  9. * 查看D盘中所有的文件和文件夹名称,并且使用名称升序降序,
  10. * 文件夹在前和文件夹在后,文件大小排序等。
  11. *
  12. * 程序分析:
  13. * 1.查找文件和文件夹,需要例题二里遍历文件的工具类(这里直接调用,不在重写)
  14. * 2.排序需要用到list集合里面的Collections工具类类的sort方法
  15. * 3.这里有三重排序:首先是要按是否是文件夹来排序,然后按名称来排序,最后按大小来排序
  16. *   其实这里还是会有问题的,按照某一个排序还没事,但是三个都排序就不一定有效!
  17. 实际应用中也是只按一种排序就可以了的
  18. * */
  19. public static void main(String[] args) {
  20. List<file> list =FileUtils.getAllFiles("D:");
  21. //按文件夹先显示的顺序:
  22. Collections.sort(list, new Comparator<file>() {
  23. @Override
  24. public int compare(File o1, File o2) {
  25. return (o2.isDirectory()?1:-1)-(o1.isDirectory()?1:-1);
  26. }
  27. });
  28. //按文件名称显示的顺序:
  29. Collections.sort(list, new Comparator<file>() {
  30. @Override
  31. public int compare(File o1, File o2) {
  32. return (o1.getName()).compareTo(o2.getName());
  33. }
  34. });
  35. //按文件名称显示的顺序:
  36. Collections.sort(list, new Comparator<file>() {
  37. @Override
  38. public int compare(File o1, File o2) {
  39. return (int)(o1.length()-o2.length());
  40. }
  41. });
  42. //遍历集合的文件
  43. for (File file : list) {
  44. //打印排序后的文件或文件夹
  45. System.out.println(file.getName());
  46. }
  47. }
  48. }
  49. </file></file></file></file>

以上是这些题目的详细的解题过程,当然很多题目的解决方法不是固定的,

但是对于基本的解题方式还是要了解的。对于知识点的掌握的话,

文件的基本操作,读取文件的基本方法,和写文件的基本方法都是要掌握的,

还有字节流的读取和字符流的读取方式和用处也要会区分。

Java IO流经典练习题的更多相关文章

  1. Java IO流经典练习题(mark用)

    一.练习的题目 (一) 在电脑D盘下创建一个文件为HelloWorld.txt文件,判断他是文件还是目录,在创建一个目录IOTest,之后将HelloWorld.txt移动到IOTest目录下去:之后 ...

  2. JAVA.IO流学习笔记

    一.java.io 的描述 通过数据流.序列化和文件系统提供系统输入和输出.IO流用来处理设备之间的数据传输 二.流 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数 ...

  3. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  4. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  5. Java IO流学习总结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  6. 揭开Java IO流中的flush()的神秘面纱

    大家在使用Java IO流中OutputStream.PrintWriter --时,会经常用到它的flush()方法. 与在网络硬件中缓存一样,流还可以在软件中得到缓存,即直接在Java代码中缓存. ...

  7. java io流 对文件夹的操作

    java io流 对文件夹的操作 检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文 ...

  8. Java IO流题库

    一.    填空题 Java IO流可以分为   节点流   和处理流两大类,其中前者处于IO操作的第一线,所有操作必须通过他们进行. 输入流的唯一目的是提供通往数据的通道,程序可以通过这个通道读取数 ...

  9. Java IO流总结

    Java IO流分类以及主要使用方式如下: IO流 |--字节流 |--字节输入流 InputStream: int read();//一次读取一个字节 int read(byte[] bys);// ...

随机推荐

  1. 【网络知识】【1】http、tcp/udp、soap的区别

    一句话总结: soap信息可以通过http协议包装后通过tcp或udp传输 参考:https://zhidao.baidu.com/question/617706398106243452.html

  2. UOJ 171 【WC2016】挑战NPC

    一开始还真没想到是一般图匹配这种模型(毕竟才会的带花树) 把每一个盒子拆成3个,每一个可以放置进它的小球分别向这三个点连边,然后这三个点在连成一个三元环,最终答案就是小球数目-匹配数. 由于是一般图, ...

  3. Codeforces Round #323 (Div. 2) C. GCD Table map

    题目链接:http://codeforces.com/contest/583/problem/C C. GCD Table time limit per test 2 seconds memory l ...

  4. python 日期输出附带毫秒

    def get_time_stamp(ct): local_time = time.localtime(ct) data_head = time.strftime( time_stamp = &quo ...

  5. node 循序渐进

    1. 执行 node helloworld.js 2. http  服务器 建 server.js 文件 -  node server.js  跑起来 -  浏览器访问  http://localho ...

  6. Flutter学习笔记(五)

    一.Container 是一个便利的Widget,它把通用的绘制.定位和Widget的大小结合了起来. Container会先用padding填充子Widget和border之间的空白,然后添加其他的 ...

  7. Android蓝牙通信功能开发

    1. 概述 Bluetooth 是几乎现在每部手机标准配备的功能,多用于耳机 mic 等设备与手机的连接,除此之外,还可以多部手机之间建立 bluetooth 通信,本文就通过 SDK 中带的一个聊天 ...

  8. CRISPR基因编辑

    2007年,一家酸奶公司发现一种细菌拥有抵御病毒的特殊防御机制.2012年,细菌的这种机制就被科学家阐述清楚,2013年这一领域快速增长.它被视为分子生物学的一个奇迹,事实上,它并非仅对生物学家产生革 ...

  9. 免费下载知网文献的方法 | sci-hub免费下载SCI论文方法

    部分方法参考自在家里如何免费使用中国知网? - 大学生 - 知乎的回答,已注明出处. 知网文献下载:idata中国知网 idata中国知网网址:idata中国知网 https://www.cn-ki. ...

  10. 在WinForm应用程序中嵌入WPF控件

    我们知道,在WPF界面上添加WinForm的控件需要使用WindowsFormHost类.而在WinForm界面上添加WPF控件该如何做呢?有没有类似的类呢?明显是有的,ElementHost就是为了 ...