听说比尔盖茨开始第一个作的项目就是DOS?哈哈!!今天就用输入输出流来模仿一下!!
在开始之前,要先来说下,用pathSeparator和separator来看下你所使用的系统所默认的分隔符;这种也是之后可做跨平台的一种方法。
//定义文件的个数
int fileCount=0;
//定义文件的总长度;
long fileTotleLenth=0;
//定义目录文件的个数
int dirctoryCount=0; // 如果目录下有文件存在,就进入输出喽
if( fs!=null|| fs.length>0){
//增强型的for输出
for(File f:fs){ //判断是文件类型还是目录类型,文件就计算长度,文件就只进行文件数++就好了。
if(f.isFile()){ fileCount++; fileTotleLenth+=f.length(); }else{ dirctoryCount++; } // getFileInfo(f) 方法在后面有定义,就是取的文件的名称,大小,和类型~
System.out.println(getFileInfo(f)); } } //仿DOS最后那个输出
System.out.println("\t\t"+fileCount+"个文件,总大小为:"+fileTotleLenth+"字节"); }
最后做个测试类~~~哈哈~~大功告成!!!
在开始之前,要先来说下,用pathSeparator和separator来看下你所使用的系统所默认的分隔符;这种也是之后可做跨平台的一种方法。
//用这种形式可以跨平台使用,(分割副不同);
//System.out.println(File.pathSeparator);
//System.out.println(File.pathSeparatorChar);
System.out.println(File.separator);
// System.out.println(File.separatorChar);
好了~可以开始啦~
(1)首先,练习一个~假如我们系统每天晚上自动备份,那么每晚自动创建一个以当前日期命名的文件:
Date d=new Date();
DateFormat df=new SimpleDateFormat("yyyyMMdd");
String fileName=df.format(d);
File f=new File(fileName);
if(! f.exists() && f.mkdir() ){
System.out.println(f.getName()+"创建成功!");
}else{
System.out.println(f.getName()+"创建失败!");
}
(2)好了~小热身结束,我要开始激动人心的模拟下DOS下的产看目录下文件的dir命令了~\(≧▽≦)/~
1.输出文件,但是并不把其子目录也一并输出的非递归型的!
//输出文件 (非递归!)
private static void showDirectoryInfo(File ff) {
//首先,我们需要先进性一步容错处理:
如果,传进来的ff为空,或者ff不是File类型的,那么我们就不应该进行下面的步骤:
if(ff==null|| ff.isFile() ){
return ;
}
<pre name="code" class="java"> //listFiles()返回一个抽象路径名数组,表示此抽象路径名表示的目录中的文件。
File[] fs=ff.listFiles();
//定义文件的个数
int fileCount=0;
//定义文件的总长度;
long fileTotleLenth=0;
//定义目录文件的个数
int dirctoryCount=0; // 如果目录下有文件存在,就进入输出喽
if( fs!=null|| fs.length>0){
//增强型的for输出
for(File f:fs){ //判断是文件类型还是目录类型,文件就计算长度,文件就只进行文件数++就好了。
if(f.isFile()){ fileCount++; fileTotleLenth+=f.length(); }else{ dirctoryCount++; } // getFileInfo(f) 方法在后面有定义,就是取的文件的名称,大小,和类型~
System.out.println(getFileInfo(f)); } } //仿DOS最后那个输出
System.out.println("\t\t"+fileCount+"个文件,总大小为:"+fileTotleLenth+"字节"); }
2.输出文件,把其子目录也一并输出的递归型的!
private static void showDirectoryInfoAll(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){
//注意!!!这里特别重要,绝对不能用level++,这样同一级别的目录也会输出不同的空格。
showDirectoryInfoAll(f,level+1);
}
}
}
}
//好了,这就是之前说的,输出文件的信息的方法,被我封装起来啦~~~
public static String getFileInfo(File f){
//防DOS系统
//最后一次被修改的时间
long time=f.lastModified();
Date timeDate=new Date();
DateFormat df=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String FileTimed=df.format(timeDate);
//求文件类型
String fileType=f.isFile()?"\t":"<DIR>";
//求文件长度
String fileLength=getfileLength(f);
return FileTimed+"\t"+fileType+"\t"+fileLength;
}
还是为了输出的美观~~~又做了个文件长度的处理!
private static String getfileLength(File f) {
if(f.isDirectory() ){
return "\t";
}
long length=f.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";
}
最后做个测试类~~~哈哈~~大功告成!!!
System.out.println("请输入一个路径:");
Scanner sc=new Scanner(System.in);
String path=sc.nextLine();
//选择目录的文件
File ff=new File(path);
System.out.println("您是否需要显示所有信息:YES(1) NO(2)");
int choose=sc.nextInt();
if(choose==1){
showDirectoryInfoAll(ff,0);
}else if(choose==2){
showDirectoryInfo(ff);
}
else{
System.out.println("输入错误!程序关闭!");
}
DOS下的dir命令显示的结果:
DOS命令里的tree命令:
俺自己写的仿写dir运行结果:
仿写tree运行结果(看着好像跟window显示的不同呀!!!嘿嘿~~很简单,将代码中sb.appan(“|\t”))和sb.appan(“-----”))就行啦~~~~哈哈~~~有木有很像!!):