• 11.15课后作业


    编写一个程序,指定一个文件夹,能自动计算出其总容量

    import java.io.*;
    public class Denglu 
    {
    public static void main(String[] args) throws IOException
    {
    try
    {
    InputStreamReader isr=new InputStreamReader(System.in);
    BufferedReader inp=new BufferedReader(isr);//进行字节字符转换 用于键盘输入
    String sdir="C:\Users\888888\Desktop\05.StreamAndFileSourceCode\File";//文件
    int count=0;//计算文件数目
    File fdir1=new File(sdir);//创建文件夹
    if(fdir1.exists()&&fdir1.isDirectory())
    {
    System.out.println(sdir+"存在");
    String[] f1=fdir1.list();//列表 下面区分list()和listFile()
    /*File f=new File("c:\");
    String[] f1=f.list();
    File[] f2=f.listFiles();
    ① list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 
    以C盘为例,返回的是c盘下文件夹名字的字符串数组,如[TEMP, Windows]
    ②listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
    以C盘为例返回的是C盘下文件夹目录地址,如[c:TEMP, c:Windows]*/
    
    for(int i=0;i<f1.length;i++)
    {
    System.out.println(f1[i]);//输出文件夹下的文件
    count++;
    }
    System.out.println("一共有"+count+"文件");
    
    //在目录下添加文件 名字jiahui
    File fdir2=new File("C:\\Users\\888888\\Desktop\\05.StreamAndFileSourceCode\\File\jiahui");
    if(!fdir2.exists())
    {
    fdir2.mkdir();//如果不存在就创建 肯定不存在你指定的
    }
    count=0;
    System.out.println("建立新的文件夹后: ");
    for(int i=0;i<f1.length;i++)
    {
    System.out.println(f1[i]);//再一次输出目录下的问价及总数
    count++;
    }
    System.out.println("一共有"+count+"文件");
    }
    System.out.println("请输入一个文件名字:");//对其中一个文件属性访问
    String sfile=inp.readLine();
    File ffile=new File(fdir1,sfile);//用一个已经存在代表某磁盘文件夹的fdir1对象作为文件夹 以sfile作为文件名字
    if (ffile.isFile())
    {
    System.out.println(ffile.getName());
    System.out.println(ffile.getPath());
    System.out.println(ffile.length());
    }
    
    inp.close();
    }
    catch(IOException e)
    {
    System.out.println(e.toString());
    }
    
    
    }
    }

    编写一个文件加解密程序,通过命令行完成加解密工作

    import java.io.FileInputStream;  
    
    import java.io.FileOutputStream;  
    
    import java.io.InputStream;  
    
    import java.io.OutputStream;  
    
    import java.security.Key;  
    
    import java.security.SecureRandom;  
    
      
    
    import javax.crypto.Cipher;  
    
    import javax.crypto.CipherInputStream;  
    
    import javax.crypto.CipherOutputStream;  
    
    import javax.crypto.KeyGenerator;  
    
      
    
    public class TestDES {   
    
      Key key;   
    
      public TestDES(String str) {   
    
        getKey(str);//生成密匙   
    
      }   
    
      /**  
    
      * 根据参数生成KEY  
    
      */   
    
      public void getKey(String strKey) {   
    
        try {   
    
            KeyGenerator _generator = KeyGenerator.getInstance("DES");   
    
            _generator.init(new SecureRandom(strKey.getBytes()));   
    
            this.key = _generator.generateKey();   
    
            _generator = null;   
    
        } catch (Exception e) {   
    
            throw new RuntimeException("Error initializing SqlMap class. Cause: " + e);   
    
        }   
    
      }   
    
      
    
      /**  
    
      * 文件file进行加密并保存目标文件destFile中  
    
      *  
    
      * @param file   要加密的文件 如c:/test/srcFile.txt  
    
      * @param destFile 加密后存放的文件名 如c:/加密后文件.txt  
    
      */   
    
      public void encrypt(String file, String destFile) throws Exception {   
    
        Cipher cipher = Cipher.getInstance("DES");   
    
        // cipher.init(Cipher.ENCRYPT_MODE, getKey());   
    
        cipher.init(Cipher.ENCRYPT_MODE, this.key);   
    
        InputStream is = new FileInputStream(file);   
    
        OutputStream out = new FileOutputStream(destFile);   
    
        CipherInputStream cis = new CipherInputStream(is, cipher);   
    
        byte[] buffer = new byte[1024];   
    
        int r;   
    
        while ((r = cis.read(buffer)) > 0) {   
    
            out.write(buffer, 0, r);   
    
        }   
    
        cis.close();   
    
        is.close();   
    
        out.close();   
    
      }   
    
      /**  
    
      * 文件采用DES算法解密文件  
    
      *  
    
      * @param file 已加密的文件 如c:/加密后文件.txt  
    
      *         * @param destFile  
    
      *         解密后存放的文件名 如c:/ test/解密后文件.txt  
    
      */   
    
      public void decrypt(String file, String dest) throws Exception {   
    
        Cipher cipher = Cipher.getInstance("DES");   
    
        cipher.init(Cipher.DECRYPT_MODE, this.key);   
    
        InputStream is = new FileInputStream(file);   
    
        OutputStream out = new FileOutputStream(dest);   
    
        CipherOutputStream cos = new CipherOutputStream(out, cipher);   
    
        byte[] buffer = new byte[1024];   
    
        int r;   
    
        while ((r = is.read(buffer)) >= 0) {   
    
            System.out.println();  
    
            cos.write(buffer, 0, r);   
    
        }   
    
        cos.close();   
    
        out.close();   
    
        is.close();   
    
      }   
    
      public static void main(String[] args){   
    
        TestDES td = new TestDES("aaa");   
    
        try {
    
    td.encrypt("e:/r.txt", "e:/r加密后.txt");
    
    } catch (Exception e) {
    
    // TODO Auto-generated catch block
    
    e.printStackTrace();
    
    } //加密   
    
        try {
    
    td.decrypt("e:/r加密后.txt", "e:/r解密后.txt");
    
    } catch (Exception e) {
    
    // TODO Auto-generated catch block
    
    e.printStackTrace();
    
    } //解密   
    
          
    
      }   
    
    }
    

      

    3、编写一个文件分割工具,能把一个大文件分割成多个小的文件。并且能再次把它们合并起来得到完整的文件。

    源代码

    import java.io.File;
    
    import java.io.FileInputStream;
    
    import java.io.FileOutputStream;
    
    import java.io.IOException;
    
    import java.io.InputStream;
    
    import java.io.OutputStream;
    
    public class FileSliptUtil {
    
        public static void splitFileDemo(File src, int m) throws IOException {
    
            if(src.isFile()) {
    
                //获取文件的总长度
    
                long l = src.length();
    
                //获取文件名
    
                String fileName = src.getName().substring(0, src.getName().indexOf("."));
    
                //获取文件后缀
    
                String endName = src.getName().substring(src.getName().lastIndexOf("."));
    
                System.out.println(endName);
    
                InputStream in = null;
    
                try {
    
                    in = new FileInputStream(src);
    
                    for(int i = 1; i <= m; i++) {
    
                        StringBuffer sb = new StringBuffer();
    
                        sb.append(src.getParent());
    
                        sb.append("\");
    
                        sb.append(fileName);
    
                        sb.append("_data");
    
                        sb.append(i);
    
                        sb.append(endName);
    
                        System.out.println(sb.toString());
    
                        
    
                        File file2 = new File(sb.toString());
    
                        //创建写文件的输出流
    
                        OutputStream out = new FileOutputStream(file2);
    
                        int len = -1;
    
                        byte[] bytes = new byte[10*1024*1024];
    
                        while((len = in.read(bytes))!=-1) {
    
                            out.write(bytes, 0, len);
    
                            if(file2.length() > (l / m)) {
    
                                break;
    
                            }
    
                        }
    
                        out.close();
    
                    }
    
                } catch (Exception e) {
    
                    e.printStackTrace();
    
                } finally {
    
                    if(in != null)
    
                        in.close();
    
                }
    
                System.out.println("--- 文件分割完成 ---");
    
            }
    
        }
    
        public static void joinFileDemo(String[] src) {
    
            //    获取合并文件
    
            File newFile = new File(src[0].toString());
    
            //    获取文件名    后缀
    
            String fileName = newFile.getName().substring(0, newFile.getName().indexOf("_"));
    
            String endName = newFile.getName().substring(newFile.getName().lastIndexOf("."));
    
            //    得到新的文件名
    
            StringBuffer sb = new StringBuffer();
    
            sb.append(newFile.getParent());
    
            sb.append("\");
    
            sb.append(fileName);
    
            sb.append(endName);
    
            newFile = new File(sb.toString());
    
            for(int i = 0; i < src.length; i++) {
    
                File file = new File(src[i]);
    
                try {
    
                    //读取小文件的输入流
    
                    InputStream in = new FileInputStream(file);
    
                    OutputStream out = new FileOutputStream(newFile, true);
    
                    int len = -1;
    
                    byte[] bytes = new byte[10*1024*1024];
    
                    while((len = in.read(bytes))!=-1) {
    
                        out.write(bytes, 0, len);
    
                    }
    
                    out.close();
    
                    in.close();
    
                } catch (Exception e) {
    
                    e.printStackTrace();
    
                }
    
            }
    
            System.out.println("文件合并完成!");
    
        }
    
        public class TestFileSlipt {
    
     
    
            public void main(String[] args) throws Exception {
    
                //分割文件
    
                FileSliptUtil.splitFileDemo(new File("文件路径"), 2);
    
                //合并文件
    
                FileSliptUtil.joinFileDemo(new String[]{"文件路径", "文件路径"});
    
            }
    
        }
    
    }
  • 相关阅读:
    【小模块】公告滚动并暂停
    w3school的PHP教程提炼(一)PHP基础
    Nicholas C. Zakas:介紹CSS Lint(检测工具)
    【小模块】回到顶部的页面跟随按钮(仿淘宝)
    【小模块】内容循环滚动(仿新浪微博未登录首页滚动微博显示)
    前端管窥:图片Sprite管理
    《锋利的jQuery》要点归纳(六)插件的使用和写法
    CSS reset 一份很全的样式表
    《锋利的jQuery》要点归纳(五)jQuery与ajax的应用(上)
    《锋利的jQuery》要点归纳(五)jQuery与ajax的应用(下)
  • 原文地址:https://www.cnblogs.com/gkl20173667/p/9985762.html
Copyright © 2020-2023  润新知