zoukankan      html  css  js  c++  java
  • 动手动脑6

    什么是流?

    一连串有顺序的数据系列可以看成是一个流。 Java将文件看成是一个流。

    字节流的两个基类InputStream和OutputStream:以字节为单位,是所有字节输入与输出流的父类; 字符流的两个基类Reader和Writer:以字符(2个字节)为单位。

    Java使用了文件缓冲技术,其优点有: 提高了I/O的性能 在内存中开辟一块区域,称为缓冲区 当缓冲区满时一次写入到磁盘中。 相关的Java类 BufferedInputStream/BufferedOutputStream:适合于包容二进制数据的文件 BufferReader/BufferWriter:适合于读写文本文件

    使使用Files. walkFileTree()找出指定文件夹下所有扩展名为.txt和.java的文件。

    import java.io.File;
    
    public class 文件大小 {
        static long sum=0;
    public static void main(String[] args) {
        File c=new File("E:/");
        length1(c);
        System.out.println("文件大小为"+sum);
    }
    
            public static void length1(File c) {
            File r[]=c.listFiles();
            
            for(int i=0;i<r.length;i++)
            {
                if(r[i].isFile())
                {
                    sum=sum+r[i].length();
                }
                if(r[i].isDirectory())
                {
                    length1(r[i]);
                }
            }
        }
    }

    用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件

    import java.io.IOException;
    import java.nio.file.FileVisitResult;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.nio.file.SimpleFileVisitor;
    import java.nio.file.attribute.BasicFileAttributes;
    import java.util.ArrayList;
    import java.util.List;
    public class walkFileTree{
    
        public static void main(String[] args) throws IOException {
            Path startingDir = Paths.get("E:\\");
    
            FilterFilesVisitor  filterFilesVisitor= new FilterFilesVisitor(".java");
            FilterFilesVisitor  filterFilesVisitor1= new FilterFilesVisitor(".txt");
            Files.walkFileTree(startingDir, filterFilesVisitor);
            Files.walkFileTree(startingDir, filterFilesVisitor1);
            for (String name : filterFilesVisitor.getFilenameList()) {
                System.out.println(name);
            }
            for (String name : filterFilesVisitor1.getFilenameList()) {
                System.out.println(name);
            }
        }
    }
    
    class FilterFilesVisitor extends SimpleFileVisitor<Path> {
    
        private List<String> filenameList = new ArrayList<String>();
        private String fileSuffix = null;
    
        public FilterFilesVisitor(String fileSuffix){
            this.fileSuffix = fileSuffix;
        }  
    
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {  
            if (file.toString().endsWith(fileSuffix)) {  
                filenameList.add(file.toString());  
            }  
            return FileVisitResult.CONTINUE;  
        }  
    
        public List<String> getFilenameList() {  
            return filenameList;  
        }  
    
        public void setFilenameList(List<String> filenameList) {  
            this.filenameList = filenameList;  
        }  
    }
    

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

    package filetest;
    import java.io.File;
    import java.io.IOException;
    
    public class FileEdit {
    double size=0.0;
    //计算文件或文件夹的大小,单位MB
    public double getSize(File file){
    //判断文件是否存在
    if(file.exists()) {
    if(!file.isFile()) {
    //获取文件大小
    File[] fl = file.listFiles();
    double ss=0;
    for(File f : fl)
    ss += getSize(f);
    return ss;
    }else {
    double ss = (double) file.length()/1024/1024;
    System.out.println(file.getName()+":"+ss+"MB");
    return ss;
    }
    }else {
    System.out.println("文件或文件夹不存在,请检查文件路径是否正确!");
    return 0.0;
    }
    }
    public static void main(String[] args) throws IOException{
    FileEdit fd = new FileEdit();
    double all = fd.getSize(new File("C:"));
    System.out.println("All: "+all+"MB");
    }
    }
    

     文件加解密

    package com_1;
    
    import java.io.File;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    //编写一个文件加解密程序,通过命令行完成加解密工作
    public class jiajiemi {
     private static final int numOfEncAndDec=0x99;//加密解密密钥
     private static int dataOfFile=0;//文件字节内容
    
     public static void main(String[] args) {
      File srcFile=new File("E:\\新建文件夹\\poem.txt");//初始化文件
      File encFile=new File("E:\\新建文件夹\\poem1.txt"); //加密文件
      File decFile=new File("E:\\新建文件夹\\poem2.txt");  //解密文件
      
      try {
       //EncFile(srcFile,encFile);  //加密操作
       //DecFile(encFile,decFile);//解密操作
        
          EncFile(srcFile,decFile);  //加密操作
    
     
    
    
    
          DecFile(decFile,encFile);
      }catch(Exception e) {
       e.printStackTrace();
      }
     }
     private static void EncFile(File srcFile,File encFile)throws Exception{
      if(!srcFile.exists()) {
       System.out.println("source file not exixt");
       }
      if(!encFile.exists()) {
       System.out.println("encrypt file created");
       encFile.createNewFile();//若无加密文件,新建一个加密文件
      }
      InputStream fis=new FileInputStream(srcFile);
      OutputStream fos=new FileOutputStream(encFile);
      
      while((dataOfFile=fis.read())>-1) {//当读到文件内容时
       fos.write(dataOfFile^numOfEncAndDec);//将读出的内容加密后写入
      }
      fis.close();
      fos.flush();
      fos.close();
     }
     private static void DecFile(File encFile,File decFile)throws Exception{
      if(!encFile.exists()) {
       System.out.println("encrypt file not exixt");
      }
      if(!decFile.exists()) {
       System.out.println("decrypt file created");
       decFile.createNewFile();
      }
      InputStream fis=new FileInputStream(encFile);
      OutputStream fos=new FileOutputStream(decFile);
      
      while((dataOfFile=fis.read())>-1) {
       fos.write(dataOfFile^numOfEncAndDec);
      }
      fis.close();
      fos.flush();
      fos.close();
     }
    
    }
    

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

     

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    //编写一个文件分割工具,能把一个大文件分割成多个小的文件。并且能再次把它们合并起来得到完整的文件
    public class CutFile {
        public static void main(String[] args) {
            //调用cutFile()函数 传人参数分别为 (原大文件,切割后存放的小文件的路径,切割规定的内存大小)
            cutFile("E:\\新建文件夹\\poem2.txt", "E:\\80747",1024 * 1024 * 20);
        }
    
     private static void cutFile(String src, String endsrc, int num) {
            FileInputStream fis = null;
            File file = null;
            try {
                fis = new FileInputStream(src);
                file = new File(src);
                //创建规定大小的byte数组
                byte[] b = new byte[num];
                int len = 0;
                //name为以后的小文件命名做准备
                int name = 1;
                //遍历将大文件读入byte数组中,当byte数组读满后写入对应的小文件中
                while ((len = fis.read(b)) != -1) {
                    //分别找到原大文件的文件名和文件类型,为下面的小文件命名做准备
                    String name2 = file.getName();
                    int lastIndexOf = name2.lastIndexOf(".");
                    String substring = name2.substring(0, lastIndexOf);
                    String substring2 = name2.substring(lastIndexOf, name2.length());
                    FileOutputStream fos = new FileOutputStream(endsrc + "\\\\"+ substring + "-" + name + substring2);
                    //将byte数组写入对应的小文件中
                    fos.write(b, 0, len);
                    //结束资源
                    fos.close();
                    name++;
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (fis != null) {
                        //结束资源
                        fis.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

      

  • 相关阅读:
    redis数据类型
    golang的select实现原理剖析
    goroutine的设计与实现
    go语言的duck typing
    go语言的局部变量在堆上还是栈上?
    REDIS学习
    C++11右值引用
    C++自问
    go语言interface学习
    go语言学习(基本数据类型)
  • 原文地址:https://www.cnblogs.com/sunhongbin/p/11826135.html
Copyright © 2011-2022 走看看