一.练习的题目
(一)在电脑D盘下创建一个文件为HelloWorld.txt文件,判断他是文件还是目录,在创建一个目录IOTest,之后将HelloWorld.txt移动到IOTest目录下去;之后遍历IOTest这个目录下的文件:
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 {
/**
* 递归实现输入任意目录,列出文件以及文件夹
*
* 设计:在FileUtils类里面实现了逻辑操作,在另一边调用就可以了
* */
public static void main(String[] args) {
//比如输入D盘
Listlist=FileUtils.getAllFiles("D:");
//输出所有的文件和文件夹的名字
for (File file : list) {
System.out.println(file);
}
}
}
(三) 递归实现列出当前工程下所有.java文件
package com.xykj.lesson3;
import java.io.File;
import java.util.List;
import com.xykj.lesson2.FileUtils;
public class Test3 {
/**
* 递归实现列出当前工程下所有.java文件
* 还是要题目2的遍历文件的工具类来获取所有的文件,再过滤.java文件就可以了
* 当前目录的地址:输入.就可以获取
* */
public static void main(String[] args) {
//输入. 获取当前文件的 所有文件
Listlist=FileUtils.getAllFiles(".");
//输出.java后缀的文件的名字
for (File file : list) {
if (file.toString().endsWith(".java")) {
System.out.println(file.getName());
}
}
}
}
(四)从磁盘读取一个文件到内存中,再打印到控制台
package com.xykj.lesson4;
import java.io.File;
import java.io.FileInputStream;
public class Tset4 {
/**
* 从磁盘读取一个文件到内存中,再打印到控制台
*
* 程序设计:
* 1、读取文件用到FileinputSteam
* 2、把读取的内容不断加入到StringBuffer,
* 3、再把StringBuffer打印出来就可以
* */
public static void main(String[] args) {
// 读取D:
otePada.txt里面的内容
File file = new File("D:\notePad\aa.txt");
try {
// 创建读取流即输入流
FileInputStream fis = new FileInputStream(file);
int len = 0;
byte[] buf = new byte[1024];
StringBuffer sb = new StringBuffer();
// 把读取的数据添加到StringBuffer里面
while ((len = fis.read(buf)) != -1) {
sb.append(new String(buf, 0, len));
}
// 把StringBuffer里面的内容打印出来
System.out.println(sb);
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上就是极悦java培训机构的小编针对“Java io流编程练习题,你都会做吗”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习