• java:io的基本实例


    一,io的常用类:

      1,File类

      2,OutputStream 字节输出流

      3,InputStream     字节输入流

      4,Writer  字符输出流

      5,Reader 字符输入流

    package io;
    
    import java.io.*;
    
    /*
    字节流
         在JAVA中所有的输入流的父类为: java.io.InputStream,此类是一个抽象类
             一、java.io.FileInputSteram
                     此类为文件输入流。
                 read方法的作用
                     从流(数据来源)中一次返回一个数据字节。如果文件中没有数据字节则会返回-1
                 available方法作用
                     返回当前流有多少个字节可以读。
                 skip(long)
                     跳过指定的指节数。
            二、java.io.FileOutputStream
                 在JAVA中所有的输出流的父类为: java.io.OutputStream,此类是一个抽象类
    
            三、BufferedInputStream BufferedOutputStream
                字节缓冲输入输出流,通过read(byte[]) 与write(byte[])实现,主要用于
                在读取数据字节的时候记录字节数。
    
             注: 以上的流都属于字节流,字节流特点是一次读取一个字节,可以用它来读取任何文件内容。
    
    字符流
           由于字节流一次读取一个字节,因此在读取一些文本内容的时候,效率会比较低,
           因此JDK提供了字符流来读取字符类文件(一次读取二个字节)。
    
           注:字符流也是由字节流来实现,字符流只能读取字符类文件。
            一、java.io.Reader(抽象类)
                    所有字符输入流的父类
            二、java.io.Writer(抽象类)
                    所有字符输出流的父类。
            三、java.io.FileReader
                   文件输入字符流
            四、java.io.FileWrite
                   文件字符输出流
            如果出现字符编码不一至造成的乱码可以使用
               InputStreamReader与 OutputStreamWrite
    
     */
    /**
     * io字节流和字符流的传递方式
     * @author dyb
     *
     */
    public class IoDemoTree {
        public static void main(String[] args) {
    
        }
        /*java本身没有IO的读写功能,它是借助平台(window)自身的读写功能来实现,每调用
          一次read方法与write方法都需要与平台建立一次连接(耗费一定的时间),因此正确的
          操作应该是在建立一次连接后读取尽量多的字节数。
           read(byte[]) 与write(byte[]) 适合不记录读取字节数的情况下一次性读完所有文件内容。
          */
        /**
         * 一次性读完整个文件,使用下列方法。
         * @throws IOException
         */
        public void rw() throws IOException {
                FileInputStream in = new FileInputStream("src/start.mp3");
                FileOutputStream out = new FileOutputStream("src/start_2.mp3");
                long s=System.currentTimeMillis();//获取文件传输开始的的时间
    
                byte[] by=new byte[8194];
                int len = 0;
                while((len=in.read(by))!=-1){
                    out.write(by,0,len);
                }
                in.close();out.close();
    
                long e=System.currentTimeMillis();
                System.out.println(e-s);
    
        }
    
        /**
         * 需要读取记录字节数使得下列方法。
         * @param aa
         * @throws IOException
         */
        public void rw(int aa) throws IOException {
                FileInputStream in = new FileInputStream("src/start.mp3");
                FileOutputStream out = new FileOutputStream("src/start_2.mp3");
                BufferedInputStream bin=new BufferedInputStream(in);
                BufferedOutputStream bout=new BufferedOutputStream(out);
                long s=System.currentTimeMillis();
                int a = 0;
                while((a=bin.read())!=-1){
                    bout.write(a);
                }
                bin.close();bout.close();
                long e=System.currentTimeMillis();
                System.out.println(e-s);
    
        }
    
        /**
         * 需要读取字符类文件并且可以修改字符编码,使用下面方法
         * @param aa
         * @throws IOException
         */
        public void rw(byte  aa) throws IOException{
            InputStreamReader iObj=new InputStreamReader
                    (new FileInputStream("src/action/说明.txt"),"GBK");
            OutputStreamWriter oObj=new OutputStreamWriter
                    (new FileOutputStream("src/action/说明2.txt"),"UTF-8");
            char[] by=new char[8888];
            int len=iObj.read(by);
            while(len!=-1){
                oObj.write(by,0,len);
                len=iObj.read(by);
            }
            iObj.close();
            oObj.close();
        }
    }

    例二:

    复制文件夹下所有的文件

    package io;
    import java.io.*;
    
    /**
     * 使用File复制文件和目录
     * @author dyb
     *
     */
    public class IoDemoTwo {
    
        public static void main(String[] args) throws IOException {
            
            /*st.copy("E:\360SoftMgrGame","E:\360downloads/aaa");*/
        
            IoDemoTwo obj=new IoDemoTwo();
            File src=new File("E:/360SoftMgrGame");
            File target=new File("E:/360downloads");
            if(!target.exists()) 
                target.mkdirs();
                obj.copy(src, target);
            
                    
                   
            }
        
        /*
         * 递归复制下一级目录
         */
        public void copy(File src,File target){
            File[] fs=src.listFiles();
            for(int i=0;i<fs.length;i++){
                   String name=fs[i].getName();
                   File newF=new File(target,name);
                   if(fs[i].isDirectory()){
                        newF.mkdirs();
                       copy(fs[i],newF);
                   }else{
                       rw(fs[i], newF);
                   }
            }
    }
        
        /**
         * 复制文件
         */
        public void rw(File src,File target){
        try {
          FileInputStream in = new FileInputStream(src);
          FileOutputStream out = new FileOutputStream(target);
          byte[] by = new byte[8194];
          int len = 0;
          while ((len = in.read(by)) != -1) {
              out.write(by, 0, len);
          }
          in.close();
          out.close();
        }catch (IOException e){
          e.printStackTrace();;
        }
    
    
            }
        
    }
  • 相关阅读:
    Zero-Copy&sendfile浅析
    Redis数据清除问题
    Redis官方文档》持久化
    GNU C 、ANSI C、标准C、标准c++区别和联系
    有关jQuery valid 验证多个同name属性的input的问题
    jQuery validator 增加多个模板
    archiver error. Connect internal only, until freed. 之解决办法
    链接ftp,把文件或图片上传到ftp指定的文件夹中
    java 数字金额转换中文金额
    java工具类 --千分位方法
  • 原文地址:https://www.cnblogs.com/dybe/p/8439896.html
Copyright © 2020-2023  润新知