自作的简单的DOS

来源:互联网 发布:js获取span的value 编辑:程序博客网 时间:2024/04/29 23:21

前些日子学习了IO方面的知识,从一开始感觉到DOS系统的强大到慢慢的去深层的了解,觉得编程的这个世界真的好强大也好神秘,我喜欢这样的工一个专业。

然后我就自己写了个DOS程序,虽然实现的功能不是很多,但是还是自己逐步想出来的,希望以后的自己看到了这段代码会觉得我的年轻时候没白过。







import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/*
 实现的功能:
 1:统计计算机的盘符情况
 2:实现盘符转换功能(cd)
 3:对初始盘符的操作(showroots)
 4:程序的推出操作(跳出大循环)
 5:查看指定目录下的文件的详细信息(DIR)
 6:帮助文档的操作(help)
 7:删除文件的操作
 8:复制文件的操作
 9:实现清屏功能
 */
public class XfDos{
public static void main(String[]agrs)throws Exception{
Map();
File[] fileRoot=File.listRoots();
showDisk();//记得加入大循环
String root=fileRoot[0].getPath();

do{
//getCd();
showFirstDisk(root);
//将此抽象路径名转换为一个路径名字符串。方便设置为第一个默认盘
//System.out.println(root);
//showFirstDisk(root);
//jumpDisk(getCd(),root);
//String getcd=getCd();
String b=getCd();
if(b.startsWith("cd ")){
root=(jumpDisk(b,root));
}
if(b.equalsIgnoreCase("HELP")){
help1();
}
if(b.startsWith("del ")){
delete1(b,root);
}
if(b.equalsIgnoreCase("exist")){//定义跳出大循环的唯一路径(调用exit方法)
System.exit(0);
}
if(b.startsWith("MIR ")){
makeDir(b,root);
}
if(b.equalsIgnoreCase("DATE")){
showDate(b,root);
}
if(b.equalsIgnoreCase("clear")){
clear1(b,root);
}
if(b.startsWith("FIND ")){
find1(b,root);
}
if(b.startsWith("COPY ")){
copy1(b,root);
}
if(b.equalsIgnoreCase("DIR")){
File ff=new File(root);
showDirectoryInfo(ff);
showAllDirectoryInfo(ff,0);
}
if (b.endsWith(" : ")){
root=jumpOtherDisk(b,root);
    }
//System.out.println(a);

}while (true);
//getCd();

}
public static void Map(){//基本的界面
System.out.println("*****************************");
System.out.println(" -。-小冯创作的DOS系统,翻版必究 - 。 - ");
System.out.println("*****************************");
}
public static void showDisk(){//取得计算机的盘符
File[] fileRoot=File.listRoots();
System.out.println("你的计算机拥有以下的盘符");
for(File roots:fileRoot){
System.out.print( roots +"\t");
}
System.out.println();
}
public static void showFirstDisk(String values){//设置第一个默认盘符
System.out.print(values+">"); 
}




public static String jumpDisk(String cd,String root){//实现dos中的cd盘符转换功能
if(cd.equalsIgnoreCase("cd ."))
return root;

if(cd.equalsIgnoreCase("cd ..")){//取得父目录
File file=new File(root);
String parent =file.getParent();
if(parent!=null){
return parent;
}
return root;
}

//System.out.println("找不到指定的文件");
//跳到别的文件或者目录,采用split分割空格,是目录才能返回,文件不行
 String[] s= cd.split(" ");
 File filesss = new File(root, s[1]);
   if ((filesss.exists()) && (filesss.isDirectory())) {
     return filesss.getPath();
   }
   System.out.println("找不到你要找的地方" + filesss.getPath());
 //  System.out.println();
return root;

}


public static String getCd(){//从键盘上输入的命令(此方法为重中之重)
Scanner ac=new Scanner(System.in);
return ac.nextLine();
}
//对文件进行的复制
public static void copy1(String cd,String root)throws Exception{//采用流方法
Scanner ac=new Scanner(System.in);
String []s=cd.split(" ");
File f=new File(root,s[1]);
if(f==null||!f.exists()||f.isDirectory()){
throw new IllegalArgumentException(f.getName()+"参数不合法");
}
InputStream iis=new FileInputStream(f);
System.out.println("请输入要保存的数据的quan路径");
String outFilePath=ac.nextLine();
File outFile=new File(outFilePath);
if(outFile.exists()){//如果文件存在了,生命异常
throw new IllegalArgumentException("已经有同名的文件了");
}if(outFile.getParent()==null){//如果路径不对,声明异常
throw new NullPointerException("清输入正确的路径,谢谢");
}
OutputStream  outiis=new FileOutputStream(outFile);
byte[]bs=new byte[1024];
int length=0;
while((length=iis.read(bs,0,bs.length))!=-1){
outiis.write(bs,0,length);
}
outiis.flush();
iis.close();
System.out.println("复制成功");
}
public static void makeDir(String cd,String root){
String []s=cd.split(" ");
File ss=new File(root,s[1]);
if(ss.exists()){
System.out.println("文件或者目录创建失败,已经存在了");
}
else{
ss.mkdir();
System.out.println("文件创建成功");
}
}
public static void clear1(String cd,String root ){//不能从根本实现清屏,到时候问影哥
for(int i =0;i<=20;i++){
System.out.println();
}

}


public static void help1(){
System.out.println("HELP"+"\t\t有关系统的文档帮助,清输入HELP");
System.out.println("CD"+ "\t\t显示当前目录的名车或者将其更改" );
System.out.println("DEL"+"\t\t删除至少一个文件");
System.out.println("DIR"+"\t\t显示目录的详细信息");
System.out.println("EIXST"+"\t\t退出小冯的dos - 。。- ");
System.out.println("MIR"+"\t\t创建目录");
System.out.println("DATE"+"\t\t显示日期");
System.out.println("FIND"+"\t\t显示文件的详细信息");
System.out.println("COPY"+"\t\t将一个文件复制到另外一个文件中");
System.out.println("CLEAR"+"\t\t清除屏幕,嘿,障眼法");

}
/*public static void (String cd,String root){

}*/
public static void find1(String cd,String root)throws Exception{
String []s=cd.split(" ");
File f=new File(root,s[1]);

if(f==null||!f.exists()||f.isDirectory()){
throw new IllegalArgumentException(f.getName()+"参数不合法");
}
InputStream iis=new FileInputStream(f);
byte[]bs=new byte[1024];
int length=0;
while((length=iis.read(bs,0,bs.length))!=-1){
String ss=new String (bs,0,length);
System.out.print(ss);
}
iis.close();
}
public static void showDate(String cd,String root){
Date d=new Date();
DateFormat dd=new SimpleDateFormat("yyyy年MM月dd日  HH:mm:SS"); 
String Truedate=dd.format(d);
System.out.println(Truedate);

}
//对指定文件进行的删除
public static void delete1(String cd,String root){
String[] s= cd.split(" ");
File file1 = new File(root, s[1]);
//File file2=new File(file1+root);
//File file=new File(filesss);
if(!file1.exists()){
System.out.println("找不到指定要删除的内容,严肃点,别笑");
}
else{//情况一:只有单个文件
if(file1.isFile()){
file1.delete();
System.out.println("该文件已经删除成功了");
}
if(file1.isDirectory()){
file1.delete();
System.out.println("你要删除的是一个目录,里面可能包含非常重要的信息的,你确定要删除它吗 y删除,n否");
Scanner ac=new Scanner(System.in);
if(ac.nextLine().equals("y")){
File[] files=file1.listFiles();
for(File filess:files){
filess.delete();
}
file1.delete();
System.out.println("目录已经删除成功");
}

}

}
}


public static String jumpOtherDisk(String cd,String root){//跳转到其他的盘符

if(cd.endsWith(":")){
File[] fileRoot=File.listRoots();
for(File roots:fileRoot){
if(cd.equalsIgnoreCase((roots.toString().substring(0, 2)))){
root= roots.toString();
return root;
}
}

}
return root;

}


//========================================================================
//显示文件的详细信息
public static void showAllDirectoryInfo(File ff,int level){
if(ff==null||ff.exists()==false){
return;
}
StringBuffer sb=new StringBuffer();
for(int i=0;i<level;i++){
sb.append("  ");
}
System.out.println(sb.toString()+ff.getName());
if(ff.isDirectory()){
File[]fs=ff.listFiles();
if(fs!=null && fs.length>0){
for(File f:fs){
showAllDirectoryInfo(f,level+1);
}
}
}
}


public static void showDirectoryInfo(File ff){
if(ff==null||ff.isFile()){
return ;
}
File[]fs=ff.listFiles();
int fileCount=0;
long fileTotleLength=0;
int directoryCount=0;
if(fs!=null&&fs.length>0){
for(File file:fs){
//System.out.println(getFileInfo(file));
if(file.isFile()){
fileCount++;
fileTotleLength+=file.length();
}else{
directoryCount++;
}
System.out.println(getFileInfo(file));
}
}
System.out.println("\t\t"+fileCount+"个文件,总大小为"+fileTotleLength+"字节");
System.out.println("\t\t"+directoryCount+"个目录");
}

/*
获取一个文件的信息
*/
public static String getFileInfo(File f3){
//求文件最后的删除时间
long time=f3.lastModified();
Date timedate=new Date(time);
DateFormat d3=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String showDate=d3.format(timedate);
//求文件的类型
String fileType=f3.isFile()?"\t":"<DIR>";
//求文件的长度
String fileLength=getFileLength(f3);
//返回
return showDate+"\t"+fileType+"\t"+fileLength+"\t"+f3.getName();
}
public static String getFileLength(File file){
if(file.isDirectory()){
return "\t";
}
long length=file.length();
if(length/1024/1024/1024/1024/1024>0){
return length/1024/1024/1024/1024/1024+"PB";
}
if(length/1024/1024/1024/1024>0){
return length/1024/1024/1024/1024+"TB";
}
if(length/1024/1024/1024>0){
return length/1024/1024/1024+"GB";
}
if(length/1024/1024>0){
return length/1024/1024+"MB";
}
if(length/1024>0){
return length/1024 +"KB";
}
return length+"B";
}
}

图片就上传三张啦,其他的功能能实现,但是有个不好的地方是尝试过很多种的方法都实现不了java清屏的功能,我查了资料发现Dos系统也没完全实现这个功能的,

所以我就通过换行切换,感觉还是不大好,希望以后学习到怎么解决这个问题吧,以后的路还有好长,希望自己能够一直的坚持下去,加油!!!

0 0
原创粉丝点击