Java IO流经典练习题
转载于:https://blog..net/wenzhi20102321/article/details/52582705
博主对转载的原代码进行了调试,改了一些小问题后,亲测可用。
本文对javaIO流的13道经典的练习题做解答,里面有详细的思路解析,做题时最好养成先写思路在编程的习惯。
(一) 在电脑D盘下创建一个文件为HelloWorld.txt文件,判断他是文件还是目录,在创建
一个目录IOTest,之后将HelloWorld.txt移动到IOTest目录下去;之后遍历IOTest这个目录下的文件
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目录下去
//移动文件用:renameTo(File file)里面需要传入一个file类型的对象
File file3 = new File(file1.getPath()+"/"+file1.getName());
//File file3 = new File("D:/IOTest/文件名"); //这里的代码加上
//file.renameTo(file3)会创建一个文件
if(file.renameTo(file3)) {
System.out.println("移动成功");
}else {
System.out.println("移动失败");
}
//遍历IOTest目录下的文件
//list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
String[] list = file1.list();
for(String str:list) {
System.out.println(str);
}
}
}
(二) 递归实现输入任意目录,列出文件以及文件夹,效果看图
1.先建一个FileUtile工具类
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();
//如果文件夹有内容,遍历里面的所有文件(包括文件夹和文件),都添加到集合里面
for (File file2 : fillArr) {
//如果只是想要里面的文件或者文件夹或者某些固定格式的文件可以判断下再添加
files.add(file2);
//添加到集合后,在来判断是否是文件夹,再遍历里面的所有文件
//方法的递归
if(file2.isDirectory()) {
longErgodic(file2, files);
}
}
}
}
2.再建一个主方法调用类
import java.io.File;
import java.util.List;
/**
* 递归实现输入任意目录,列出文件以及文件夹
*
* 设计:在FileUtils类里面实现了逻辑操作,在另一边调用就可以了
* */
public class Test2 {
public static void main(String[] args) {
//比如输入D盘下自己建的测试文件夹
List list = FileUtileTest2.getAllFiles("D:/test");
//输出所有的文件和文件夹的名字
for(File file:list) {
System.out.println(file);
}
}
}
(三) 递归实现列出当前工程下所有.java文件
import java.io.File;
import java.util.List;
import com.xykj.lesson2.FileUtils;
public class Test3 {
/**
* 递归