笔记 -11- File. IO概述 字节流 缓冲流 练习
day11-File与IO课后作业题
题目1[File]
请在D盘根目录下创建一个文件:test1.txt(随意录入一些内容),再创建一个目录:测试目录
要求:
-
获取、打印file1和file2的绝对路径;
-
获取、打印file1和file2的文件名和目录名;
-
获取、打印file1和file2的文件大小;
-
分别判断file1和file2是否存在;
-
分别判断file1和file2是否是文件?是否是目录?
效果:
参考代码:
public static void main(String[] args) {
File file1 = new File("D:\\test1.txt");
File file2 = new File("D:\\测试目录");
//1. 获取、打印file1和file2的绝对路径;
System.out.println("文件1的绝对路径是:"+file1.getAbsolutePath());
System.out.println("文件夹2的绝对路径是:"+file2.getAbsolutePath());
//2. 获取、打印file1和file2的文件名和目录名;
System.out.println("文件1的名称是:"+file1.getName());
System.out.println("文件夹2的名称是:"+file2.getName());
//3. 获取、打印file1和file2的文件大小;
System.out.println("文件1的大小是:"+file1.length());
System.out.println("文件夹2的大小是(文件夹获取的不准确):"+file2.getName());
//4. 分别判断file1和file2是否存在;
System.out.println("file1表示的文件存在吗?"+file1.exists());
System.out.println("file2表示的文件夹存在吗?"+file2.exists());
//5. 分别判断file1和file2是否是文件?是否是目录?
System.out.println("file1表示的是文件吗?"+file1.isFile());
System.out.println("file2表示的是文件吗?"+file2.isFile());
}
题目2[File]
请编写main()方法,创建以下File对象:
File file1 = new File(“test.txt”);//相对路径
File file2 = new File(“一级目录”);
File file3 = new File(“目录A/目录B/目录C”);
要求:
(相对路径,可以相对于项目也可以相对于模块)
-
判断file1是否存在?如果不存在,创建这个文件。
-
判断file2是否存在?如果不存在,创建这个目录。
- 判断file3是否存在?如果不存在,创建这个多级目录。
效果:
参考代码:
public static void main(String[] args) throws IOException {
File f1 = new File("test.txt");//相对路径,(我设置的是相对于模块的)
File f2 = new File("abc");
File f3 = new File("a\\b\\c");
//1. 判断f1是否存在?如果不存在,创建这个文件。
if (!f1.exists()) {
f1.createNewFile();
}
//2. 判断f2是否存在?如果不存在,创建这个目录。
if (!f2.exists()) {
f2.mkdirs();
}
//3. 判断file3是否存在?如果不存在,创建这个多级目录。
if (!f3.exists()) {
f3.mkdirs();
}
}
题目3[File]
请在D盘下创建一个目录“多级目录”,下面随意创建一些文件和目录。
请编写main()方法,创建以下File对象:
File file = new File(“D:\多级目录”);
要求:
遍历这个多级文件夹下的所有内容(包含子文件夹的内容),判断每个File对象是否文件
如果是文件,打印:【文件】+ 绝对路径
如果是目录,打印:【目录】+ 绝对路径
效果
参考代码:
public static void main(String[] args) {
File file = new File("D:\\a");
//处理文件夹的方法
dir(file);
}
public static void dir(File file) {
File[] arr = file.listFiles();
for (File f : arr) {
if(f.isFile()){
System.out.println("文件:"+f.getAbsolutePath());
}else {
//说明f是文件夹,先打印,然后再递归处理
System.out.println("文件夹:"+f.getAbsolutePath());
dir(f);
}
}
}
题目4[File综合题有难度]
请使用代码计算出你电脑上的任意一个文件夹中的大小。
要求:
必须是一个多层文件夹;
效果
(每个人的具体数据都不一样,以实际情况为准)
参考代码:
public static void main(String[] args) {
File file = new File("E:\\Java学习专用\\神器资料-很重要!!\\常用API");
//处理文件夹的方法
dir(file);
//直接输出成员变量的值即可
System.out.println(file.getName()+"文件夹的总大小是:"+len+" 个字节!");
}
private static long len = 0;//统计总大小的静态变量
public static void dir(File file) {
File[] arr = file.listFiles();
for (File f : arr) {
if(f.isFile()){
//文件就获取大小并累加起来
len+=f.length();
}else {
//说明f是文件夹,递归处理
dir(f);
}
}
}
题目5[IO]
使用键盘输入多个学生的信息,并将这些学生的信息保存到模块的1.txt文件中;
要求:
1:学生信息包含姓名、年龄(用一行字符串表示即可,无需创建学生对象);
2:每个学生信息占一行,学生信息之间使用逗号分隔;
3:至少输入3个学生信息;
效果
参考代码:
public static void main(String[] args) throws Exception {
//创建文件对象,准备写数据
FileOutputStream fout = new FileOutputStream("1.txt");
Scanner sc = new Scanner(System.in);
for (int i = 1; true; i++) {
System.out.println("请输入第"+i+"个学生姓名和年龄,学生信息之间使用逗号分隔(ok表示结束):");
String s = sc.next();
if("ok".equalsIgnoreCase(s)){
System.out.println("拜拜!");
break;
}
// \r\n表示换行
fout.write((s+"\r\n").getBytes());
}
fout.close();
}
题目6[IO-综合题2有难度-明天做会更简单]
将上一题产生的文件中的学生按照年龄升序排序后重新写回原文件;
效果
1.txt文件排序前:
1.txt文件排序后:
参考代码:
public static void main(String[] args) throws Exception {
File f = new File("1.txt");
//创建文件对象,准备读数据
FileInputStream fin = new FileInputStream(f);
byte[] arr = new byte[(int)f.length()];//文件中有多少字节,就创建多大的数组,一次性读完
fin.read(arr);//读到的数据都保存到了arr中
//把数组转成字符串
String s = new String(arr);
//使用换行符切分字符串
String[] split = s.split("\r\n");
//再使用逗号切分数组中的每一个元素,可以得到学生的姓名和年龄
//创建set集合并指定排序规则
TreeSet<Student> set = new TreeSet<>((s1,s2)->s1.getAge()-s2.getAge()==0?s1.getName().compareTo(s2.getName()):s1.getAge()-s2.getAge());
for (String s1 : split) {
String[] split1 = s1.split(",");
//把按照切分出来的数组的第1个值作为name,第二个值作为age创建学生对象,并按照年龄排序
Student stu = new Student(split1[0],Integer.parseInt(split1[1]));
set.add(stu);
}
//创建输出流,并把set集合中的学生信息重新写入1.txt文件中;(重写Student的toString方法了)
FileOutputStream fout = new FileOutputStream("1.txt");
for (Student stu : set) {
fout.write((stu.toString()+"\r\n").getBytes());
}
fin.close();
fout.close();
System.out.println("排序已完成");
}
ring方法了)
FileOutputStream fout = new FileOutputStream("1.txt");
for (Student stu : set) {
fout.write((stu.toString()+"\r\n").getBytes());
}
fin.close();
fout.close();
System.out.println("排序已完成");
}
本文地址:https://blog.csdn.net/qq_45181415/article/details/111874363
上一篇: 等待线程池中任务执行完成