本文对javaIO流的13道经典的练习题做解答,里面有详细的思路解析,做题时最好养成先写思路在编程的习惯。
一.练习的题目
(一)在电脑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盘中所有的文件和文件夹名称,并且使用名称升序降序,文件夹在前和文件夹在后,文件大小排序等。
二.详细的解题过程
(一)第一题
package com.xykj.lesson1;
import java.io.File;
import java.io.IOException;
public class Test1 {
/**
* 1. 在电脑D盘下创建一个文件为HelloWorld.txt文件,
* 判断他是文件还是目录,再创建一个目录IOTest,
* 之后将HelloWorld.txt移动到IOTest目录下去;
* 之后遍历IOTest这个目录下的文件
*
* 程序分析:
* 1、文件创建使用File的createNewFile()方法
* 2、判断是文件用isFile(),判断是目录用isDirectory
* 3、创建目录用:mkdirs()方法
* 4、移动文件用:renameTo
* 5、遍历目录用:list()方法获得存放文件的数组,foreach遍历的方法把文件打印出来
* */
public static void main(String[] args) {
//在电脑D盘下创建一个文件为HelloWorld.txt文件
File file=new File("D:","HelloWorld.txt");
//创建文件,返回一个布尔值
boolean isCreate;
try {
isCreate = file.createNewFile();
if (isCreate) {
System.out.println("创建文件成功!");
}else {
System.out.println("创建文件失败!文件已经存在");
}
} catch (IOException e) {
System.out.println("创建文件失败!");
}
// 判断他是文件还是目录,
if (file.isFile()) {
System.out.println("这是一个文件");
} else {
System.out.println("这是一个目录");
}
//再创建一个目录IOTest
File file2=new File("D:/IOTest");
file2.mkdirs();
//HelloWorld.txt移动到IOTest目录下去?失败?》
if (file.renameTo(file2)) {
System.out.println("文件移动成功!");
} else {
System.out.println("文件移动失败");
}
//遍历IOTest目录下的文件
String[] arr=file2.list();
for (String string : arr) {
System.out.println(string);
}
}
}
//上面移动文件要指明文件路径和文件名
上面的file.renameTo(file2)改为:
file.renameTo(file2.getPath + "/" + file.getName());
就不会有错了。
(二)第二题
1.先建一个FileUtile工具类
package com.xykj.lesson2;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* 这是一个获取目录下所有文件夹内的所有文件的封装类
* 当然前提是你要传进来一个正确路径的文件夹
* */
public class FileUtils {
//获取文件夹下所有的文件
public static List getAllFiles(String dir){
//创建一个集合存放遍历到的File
List< File >files=new ArrayList();
File file=new File(dir);
//文件夹必须存在 并且要是文件夹
if (file.exists()&&file.isDirectory()) {
//重点! 这里要本身一直遍历
longErgodic(file,files);//把遍历得到的东西存放在files里面
}
return files;
}
//重点理解,这是一个递归方法,会不断来回调用本身,但是所有获得的数据都会存放在集合files里面
private static void longErgodic(File file, List files) {
//.listFiles()方法的使用
//把文件夹的所有文件(包括文件和文件名)都放在一个文件类的数组里面
File[] fillArr=file.listFiles();
//如果是一个空的文件夹
if (fillArr==null) {
//后面的不执行,直接返回
return;
}
//如果文件夹有内容,遍历里面的所有文件(包括文件夹和文件),都添加到集合里面
for (File file2 : fillArr) {
//如果只是想要里面的文件或者文件夹或者某些固定格式的文件可以判断下再添加
files.add(file2);
//添加到集合后,在来判断是否是文件夹,再遍历里面的所有文件
//方法的递归
longErgodic(file2, files);
}
}
}
2.再建一个主方法调用类
package com.xykj.lesson2;
import java.io.File;
import java.util.List;
public class Test2 {
/**
* 递归实现输入任意目录,列出文件以及文件夹<