使用java的File类和IO流简单模仿DOS系统的部分操作
具体功能如图所示:
public class MainView {
private static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
FileHelper helper = FileHelper.getInstance();
System.out.println("-------------------------------------------------------");
System.out.println("- java 模仿doc简易系统 -");
System.out.println("- dir 显示当前目录下所有内容 -");
System.out.println("- cd 目录名称/ .. 进入到子目录或者返回父级目录 -");
System.out.println("- mkdir 目录名称 创建目录 -");
System.out.println("- createFile 文件名称 创建文件 -");
System.out.println("- rename 原文件名 新文件名 修改文件或者目录名称 -");
System.out.println("- search 文件名 搜索文件名中包含关键字的文件 -");
System.out.println("- del 目录/文件名称 删除文件夹或者文件 -");
System.out.println("- copy 文件/目录名称 目标路径 复制文件或者目录 -");
System.out.println("- open 文件名称 打开文本文件 -");
System.out.println("- update 文件名称 是否追加 具体内容 修改文件内容 -");
System.out.println("- exit 退出系统 -");
System.out.println("-------------------------------------------------------");
System.out.println();
while(true){
System.out.print(helper.getPath() + " ");
String command = reader.readLine();
String[] cmds = command.split(" ");
if("dir".equalsIgnoreCase(cmds[0])){
helper.dir();
}else if("cd".equalsIgnoreCase(cmds[0])){
helper.cd(cmds[1]);
}else if("mkdir".equalsIgnoreCase(cmds[0])){
helper.mkdir(cmds[1]);
}else if("createFile".equalsIgnoreCase(cmds[0])){
helper.createFile(cmds[1]);
}else if("rename".equalsIgnoreCase(cmds[0])){
helper.rename(cmds[1],cmds[2]);
}else if("del".equalsIgnoreCase(cmds[0])){
helper.del(cmds[1]);
}else if("open".equalsIgnoreCase(cmds[0])){
helper.open(cmds[1]);
}else if("copy".equalsIgnoreCase(cmds[0])){
helper.copy(cmds[1],cmds[2]);
}else if("search".equalsIgnoreCase(cmds[0])){
helper.search(cmds[1]);
}else if("update".equalsIgnoreCase(cmds[0])){
helper.update(cmds[1],Boolean.parseBoolean(cmds[2]),cmds[3]);
}else if("exit".equalsIgnoreCase(cmds[0])){
helper.exit();
}
}
}
}
- dir 命令可以查看当前目录下所有的内容如下图所示:
dir 部分实现代码
/**
* 显示当前目录下的所有子项
*/
public void dir() {
int fileCount = 0, dirCount = 0;
File[] files = currentFile.listFiles();
System.out.println("最后修改时间\t\t\t\t类型\t\t\t\t大小\t\t\t名称");
for (File file : files) {
if (!file.isHidden()) {
String time = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(file.lastModified());
String name = file.getName();
String type = "文件";
String len = "";
if (file.isDirectory()) {
dirCount++;
type = "文件夹";
len = file.list().length + "项";
} else if (file.isFile()) {
fileCount++;
len = checkSize(file.length());
}
System.out.println(time + "\t\t" + type + "\t\t\t" + len + "\t\t\t" + name);
}
}
System.out.println(fileCount + " 个文件");
System.out.println(dirCount + " 个文件夹");
}
- cd 命令 ,进入到子目录或者返回上级目录
public void cd(String name) {
if ("..".equalsIgnoreCase(name)) {
if (!currentFile.getAbsolutePath().equalsIgnoreCase(ROOT_PATH)) {
currentFile = currentFile.getParentFile();
}
} else {
File file = new File(currentFile, name);
if (!file.exists() || !file.isDirectory()) {
System.out.println("错误:" + name + "不存在或者不是一个目录");
return;
}
currentFile = file;
}
}
- mkdir 创建目录
- createFile 创建文件
- search 通过递归算法,可以模糊搜索带有指定关键字的文件名称,显示出来
- del 可以删除目录或者文件,通过递归算法删除
private void delFile(File file){
File[] files = file.listFiles();
for (File f1 : files) {
if (!f1.isFile() && f1.list().length != 0) {
delFile(f1);
}
f1.delete();
}
file.delete();
}
- copy 可以复制文件或者目录,复制目录通过递归算法
/**
* 复制文件或者目录
* @param source
* @param target
* @throws IOException
*/
public void copy(String source,String target) throws IOException {
File sourceFile = new File(source);
if (!sourceFile.exists()){
System.out.println("错误:源文件不存在");
return;
}
File targetFile = new File(target,sourceFile.getName());
if (targetFile.exists()){
System.out.println("错误:目标路径中包含"+sourceFile.getName() +"文件或者目录");
return;
}
if (sourceFile.isFile()){
copyFile(sourceFile,targetFile);
}else if(sourceFile.isDirectory()){
copyDir(sourceFile,targetFile);
}
}
- open 通过IO流将指定的文件内容读取出来
- update 更新文件内容
代码仅供参考,具体代码点击下载