dfm.java

来自「该文件包括一个代码文件DFM.java」· Java 代码 · 共 314 行

JAVA
314
字号
/*
 * Copyright (c) 2007 Dragon Sun.  All rights reserved.
 *本代码基于Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04)平台开发
 * 任何人可以将本代码用于非商业性的学习、使用、修改.
 * 本代码实现建立文件目录及文件,拷贝文件、删除文件,显示文件列表,每项功能都做了异常处理
 * 本代码为本人第一次编写的java代码,如有什么不足,或您对本代码有任何意见,欢迎联系我
 * 本人联系方式:Email:dragonleehom@yahoo.com.cn;QQ:51693531;MSN:draognleehomone@hotmail.com.
 *2007-1-1 21:31
 */


import java.io.*;

public class DFM {

/****************显示帮助***********************/
  public static void usage(int wh) {
  			if(wh==0)//帮助文档提示语句
  			{
        		System.out.println("+--帮助:命令格式--java DFM [/主参数] [/子参数1]...[/子参数n]");
        		System.out.println("|---[/?]  帮助" );
        		System.out.println("|--+[/1]  建立目录" );
        		System.out.println("|  |------1.[完整目录路径]" );
        		System.out.println("|--+[/2]  复制文件" );
        		System.out.println("|  |------1.[源文件路径]" );
        		System.out.println("|  |------2.[目的文件路径]" );
        		System.out.println("|--+[/3]  删除文件" );
       		  System.out.println("|  |------1.[完整文件路径]" );
       		  System.out.println("|--+[/4]  创建文件" );
        		System.out.println("   |------1.[完整文件夹路径]" );
        		System.out.println("|--+[/5]  文件列表" );
        		System.out.println("   |------1.[完整文件夹路径]" );
        		
        		System.exit(0);
    		};
    		if(wh==1)//建立目录帮助提示
    		{
    				System.out.println("建立目录的正确命令应该是 java DFM /1 x:/xxx/.../xx ");
    				System.exit(0);
    		};
    		if(wh==2)//复制文件帮助提示
    		{
    				System.out.println("复制文件的正确命令应该是 java DFM /2 x:/xxx/.../xx  y:/yyy/.../yy  ");
    				System.exit(0);
    		};
    		if(wh==3)//删除文件帮助提示
    		{
    				System.out.println("删除文件的正确命令应该是 java DFM /3 x:/xxx/.../xx  ");
    				System.exit(0);
    		};
    		if(wh==4)//文件列表帮助提示
    		{
    				System.out.println("创建文件的正确命令应该是 java DFM /4 x:/xxx/.../xx.xx  ");
    				System.exit(0);
    		};
    		if(wh==5)//文件列表帮助提示
    		{
    				System.out.println("文件列表的正确命令应该是 java DFM /5 x:/xxx/.../xx  ");
    				System.exit(0);
    		};
  }
  /********************main*************/
	public static void main(String[] args) 
	{     
					String kk;
         if(args.length<1 || args.length>3)
        	usage(0);
      
        		/**********选择帮助***********/
          else  if (args[0].equals("/?")) 
            {
                		usage(0);
            }
            
            /**********选择建立目录***********/
           else if	(args[0].equals("/1"))
            {
            		if(args.length!=2)
            			usage(1);//判断输入格式是否有错误
            		else
            		{
            			try 
            			{ creatdir(args[1]); }//调用建立目录方法
            			catch (SecurityException e) 
            			{ System.err.println(e.getMessage());}//捕获错误并显示
    						}
    					}
            	
            /**********选择复制文件***********/
            else if	(args[0].equals("/2"))
            {
            		
            		if(args.length==2)
            		{
            			kk=System.getProperty("user.dir");;
            			}
            		else
            		{
            			kk=args[2];
            			}	
            		if(args.length != 3 && args.length !=2)
            			usage(2);//判断输入格式是否有错误
            		else
            		{
            			try { copy(args[1], kk );}//调用建立目录方法
            			catch (IOException e) { System.err.println(e.getMessage());}//捕获错误并显示
            	}
            }
            	
            /**********	选择删除文件**********/
            else if	(args[0].equals("/3"))
            {
            		if(args.length !=2)
            			usage(3);//判断输入格式是否有错误
            		else
            		{
            			try { delete(args[1]); }//调用建立目录方法
            			catch (IllegalArgumentException e) { System.err.println(e.getMessage());//捕获错误并显示

            			}
            	}
            }
                        /**********	选择创建文件**********/
            else if	(args[0].equals("/4"))
            {
            		if(args.length !=2)
            			usage(4);//判断输入格式是否有错误
            		else
            		{
            			try { creatfile(args[1]); }
            			catch (IOException e) { System.err.println(e.getMessage());
            			}
            	}
            }	
            /************选择文件列表**************/
            else if	(args[0].equals("/5"))
            {
            		if(args.length==1)
            		{
            			kk=System.getProperty("user.dir");;
            			}
            		else
            		{
            			kk=args[1];
            			}	
            		if(args.length<1 || args.length>2)
            			usage(5);//判断输入格式是否有错误
            		else
            		{
            			try { listfile(kk); }//调用建立目录方法
            			catch (SecurityException e) { System.err.println(e.getMessage());//捕获错误并显示
            			}
            		}
        		}
        		
        		else
        			usage(0);//如果输入仍然有误,显示帮助

 }
 
 	/**************文件复制方法*/
	public static void copy(String from_name, String to_name)
	throws IOException
    {
        File from_file = new File(from_name);  // 获取文件对象
        File to_file = new File(to_name);
        
        // 确定文件是否存在、路径是否正确、是否可读
        if (!from_file.exists())
            abort("原文件"+ from_name+"不存在: " );
        if (!from_file.isFile())
            abort("文件路径"+ from_name+"有误: " );
        if (!from_file.canRead())
            abort("原文件"+ from_name+"不可读: " );
        
        // 如果目标路径存在,将源文件名添加于目标路径之后
        if (to_file.isDirectory())
            to_file = new File(to_file, from_file.getName());
        
        // 如果目标文件已经存在,确定其是否可写,并在覆盖前询问是否确定覆盖
        // 如果目标文件不存在,确定路径存在并可写
        if (to_file.exists()) {
            if (!to_file.canWrite())
                abort("目标文件"+ to_name+"无法写入: " );
            // 确认覆盖文件
            System.out.print("覆盖已有文件" + to_file.getName() +
			     "? (Y/N): ");
            System.out.flush();
            //获取用户返回值
            BufferedReader in=
		new BufferedReader(new InputStreamReader(System.in));
            String response = in.readLine();
            // 检测返回值,如果否则取消复制.
            if (!response.equals("Y") && !response.equals("y"))
                abort("文件复制已取消.");
        }
        else {  
            String parent = to_file.getParent();  // 目标路径
            File dir = new File(parent);          // 转换成文件对象
            if (!dir.exists())
                abort("目标路径"+parent+"不存在: ");
            if (dir.isFile())
                abort("输入目标"+ parent+"不是一个路径: " );
            if (!dir.canWrite())
                abort("目标路径"+ parent+"无法写入: " );
        }
        

        FileInputStream from = null;  //源文件流
        FileOutputStream to = null;   // 目的文件流
        try {
            from = new FileInputStream(from_file);  // 创建一个输入流
            to = new FileOutputStream(to_file);     // 创建一个输出
            byte[] buffer = new byte[4096];         // 获取文件内容
            int bytes_read;                         // 缓存中的byte数
            while((bytes_read = from.read(buffer)) != -1) // 一直读到文件结束
                to.write(buffer, 0, bytes_read);            // 写文件
        }
  			//关闭流
        finally {
            if (from != null) try { from.close(); } catch (IOException e) { ; }
            if (to != null) try { to.close(); } catch (IOException e) { ; }
        }
        if(to_file.exists())
        	System.out.println("复制文件成功!");
    }

    /**复制文件 抛出意外*/
    private static void abort(String msg) throws IOException 
    { 
        throw new IOException("文件复制出错: " + msg); 
    }
    
    
    /***************文件删除方法*/
		public static void delete(String filename) {
        // 创建文件对象
        File f = new File(filename);

        // 确定文件存在并且没有写保护
        if (!f.exists()) fail("删除错误: 文件或路径"+filename+"不存在: " );
        if (!f.canWrite()) fail("删除错误: 文件"+ filename+"写保护: " );

        //如果是路径,确定路径是空的
        if (f.isDirectory()) {
            String[] files = f.list();
            if (files.length > 0)
						fail("删除错误:路径"+ filename+"非空: " );
        }
        boolean success = f.delete();
        // 如果发生了在前面没有考虑到的意外,使删除失败,抛出一个意外
        if (!success) fail("由于位置原因删除失败");
        else
        System.out.println("删除文件成功!");
    }

    /** 删除文件抛出意外 */
    protected static void fail(String msg) throws IllegalArgumentException {
        throw new IllegalArgumentException(msg);
    }
    
    /************建立文件路径方法*/
    public static void creatdir(String filename) {
        File f = new File(filename);

        // 确定目录不存在
        if (f.exists()) fauls("创建错误:路径"+filename+"已经存在: " );
        boolean success = f.mkdirs();
        if (!success) fauls("由于未知原因建立路径失败");
        else
        	System.out.println("创建目录成功!");
    }
     /** 创建目录抛出意外 */
    protected static void fauls(String msg) throws SecurityException{
        throw new SecurityException(msg);
    }
    
    
    /****************文件列表方法*/
    public static void listfile(String filename) 
    {
        File f = new File(filename);

        // 确定目录存在且输入为路径
        if (!f.isDirectory()) fauls("列表错误:路径"+filename+"有错误"); 
        if (!f.exists()) fauls("列表错误:路径"+filename+"不存在: ");
        
        String[] allfiles = f.list();
        
        if (allfiles.length==0) fauls("目录"+filename+"下没有文件");
        for(int i = 0; i < allfiles.length; i++)
        System.out.println(allfiles[i]);
    }
    
    
    
    
    /***********建立新文件*/
    public static void creatfile(String filename) throws IOException {
        File f = new File(filename);

        // 确定目录不存在
        if (f.exists()) Fileabort("文件"+filename+"已经存在: " );
        boolean success = f.createNewFile();
        if (!success) Fileabort("由于未知原因建立路径失败");
        else
        	System.out.println("创建文件成功!");
    }
    private static void Fileabort(String msg) throws IOException 
    { 
        throw new IOException("文件创建出错: " + msg); 
    }
    
}     

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?