课后练习
从键盘输入一个文件名,在 D:盘查找这个文件,如果找到就输出这个文件的绝对路径,如果找不到则输出找不到这个文件。
//笔记:相对完善的查找文件的方法 //分析:一个盘中相同文件名的文件可能存在多个路径下 /** * 在指定的文件查找指定名字的文件 * @param dirFile 指定在哪查找的文件夹(或文件) * @param filename 指定要查找的文件名(或文件夹名) * @return 返回相同文件名的所有绝对路径的集合 */ public static ArrayList<String> findFilesPath(File dirFile, String filename) { if (dirFile == null || !dirFile.exists() || filename == null || filename.length()==0) { return null; } ArrayList<String> findFilesPath = new ArrayList<>(); String dirFileName = dirFile.getName(); boolean equals = dirFileName.equals(filename); if (equals) { findFilesPath.add(dirFile.getAbsolutePath()); } File[] list = dirFile.listFiles(); if (!equals && list.length == 0) { return null; } for (File f : list) { if (f.isFile()) { if (f.getName().equals(filename)) { findFilesPath.add(f.getAbsolutePath()); } } else { ArrayList<String> returnList = findFilesPath(f, filename); if(returnList!=null){ findFilesPath.addAll(returnList); } } } if(findFilesPath.size()==0){ return null; } return findFilesPath; }
编写程序来实现如下功能
在D盘下创建一个目录Letter
在控制台显示下列选项:1 查看请假条 2 撰写请假条
如果用户选择2,则提示用户撰写请假条,并把撰写的内容保存位文件,存入到Letter文件夹下。
格式如下:
请假人:王宝强
请假日期:2016年8月15日
请假原因:向法院起诉马蓉离婚.....先请假一天等等
如果用户选择1,则在控制台输出请假条的内容。
将JAVA LOGO 图片 通过鼠标右键保存到 D盘(D:\logo.png)中,然后使用java程序 实现:
剪切该图片到E盘(E:\logo.png)中。
再从E盘把该图片的 "一半" 复制一份到D盘中。
在D盘指定一个文件夹(要求文件下面有子文件夹和文件(图片,文档等),子文件夹里面也放一些文件夹和文件,以此类推,可以多放几层)。然后,复制该文件夹下所有文件和文件夹到 E盘指定目录下 。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyFile {
public static void main(String[] args) {
File source = new File("a");
File target = new File("H");
boolean copyFiles = copyFiles(source, target);
System.out.println(copyFiles);
}
/**
* 文件的拷贝
* @param source 要拷贝的文件
* @param target 要拷贝文件到哪的路径
* @return 拷贝成功返回true
*/
public static boolean copyFiles(File source, File target) {
if (source == null || target == null || !source.exists() || target.isFile()) {
return false;
}
if (!target.exists()) {
target.mkdirs();
}
File newTarget = new File(target, source.getName());
newTarget.mkdirs();
File[] list = source.listFiles();
for (File f : list) {
if (f.isFile()) {
File file = new File(newTarget, f.getName());
// 文件在写入的时候不存在则会自动创建
// if (!file.exists()) {
// try {
// file.createNewFile();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
try (FileInputStream fis = new FileInputStream(f); FileOutputStream fos = new FileOutputStream(file);) {
byte[] bs = new byte[1024];
int read = -1;
while ((read = fis.read(bs)) != -1) {
fos.write(bs, 0, read);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
} else {
copyFiles(f, newTarget);
}
}
return true;
}
}
=========================================================
课后练习
使用字符流读取一个字符文件,并把其中的所有小写字母变成大写字母,然后写入到另外一个文件中。
(使用字符流实现)编写程序来实现如下功能
在D盘下创建一个目录Letter
在控制台显示下列选项:1 查看请假条 2 撰写请假条
如果用户选择2,则提示用户撰写请假条,并把撰写的内容保存位文件,存入到Letter文件夹下。
格式如下:
请假人:王宝强
请假日期:2016年8月15日
请假原因:向法院起诉马蓉离婚.....先请假一天等等
如果用户选择1,则在控制台输出请假条的内容。
假设一个文件中有如下内容,请把这些内容读入内存,并存入List<WorldCup>集合中。 举办时间、举办国、夺冠国
```
```
写一个程序,记录程序在运行时出现过的错误,保存成错误日志!。如:
在输入Int类型的时候输错,把这个记录写入到文件中。
在String 类型 转换 int类型的时候如果出错,把错误的记录写入到文件中。
格式如下:
err:2017年3月30日 15:26:33 字符串转换Int失败 不能把 abc 转成 int 类型。
err:2017年3月30日 15:27:12 Scanner输入类型错误,要求输入int,却输入了"xyz"。
提示:捕获程序有可能出现错误的地方,在catch语句中 将错误的信息 用自己的语言组织,写入到File中。
================================================
课后练习
将D盘的一张图片存入内存中,然后再把内存中的图片数据 存入到E盘中。
在D盘新建一个 十年.txt 文件,并把《十年》的歌词存入该文件中。然后编写一个程序,结合学过的IO流知识将文件的内容读入到程序中,并使用打印流讲《十年》的歌词打印到控制台!
编写一个程序,使用 RandomAccessFile 将一段文字写入到一个名为text.dat的文件中,然后使用RandomAccessFile对象将写入的文字读出来并打印到屏幕上。
把一个mp3文件截取为3个文件。
利用 ObjectOutputStream 存入两个Worker 对象, 然后使用 ObjectInputStream读出这两个对象,并打印这两个对象的信息。
有Worker 对象,
部分代码如下:
class Worker{
private String name;
private int age
private double salary;
//构造方法
…
//get/set 方法
…
//toString 方法
…
}