zoukankan      html  css  js  c++  java
  • java 基础io读写字节以及缓存读写字节

    package io;
    
    import com.sun.istack.internal.NotNull;
    import com.sun.istack.internal.Nullable;
    import java.io.*;
    import java.nio.charset.StandardCharsets;
    
    public class iodemo {
    
    
        public static void main(String[] args)throws IOException {
            String src = "D:\workspace\javahmac\leetcode\io\test1.txt";
            String dest= "D:\workspace\javahmac\leetcode\io\test2.txt";
    //        readThenWrite(src,dest);
              bufferWrite(src,dest);
    
        }
        static  String readMethod(@NotNull String path) throws IOException {
             /** Return string */
             InputStream in = new FileInputStream(path);
             byte[] bytes = new byte[1024];  //todo onetime read bytes length !!!
             int num=0;
             // todo -1 表示文件指针到文件末尾,其他则返回num代表文件指针当前的位置,off表示byte 数组存放的偏移量
             //   read()  * @返回读入缓冲区的字节总数,或者
            //      -1表示如果由于末尾没有更多数据,已到达流。
             StringBuilder builder= new StringBuilder(); // String str="";也可以
             while ((num=in.read(bytes,0,bytes.length))!=-1){
                  // str += new String(bytes, 0, num);也可以
                  builder.append(new String(bytes, 0, num)); // 一次转换多少字节为字符串,保留换行符等等
    
            }
             System.out.println(builder);  // todo 带换行符号
             return builder.toString();
        }
    
        @Deprecated
        static void writeMethod(String path,@Nullable String mode,String text) throws IOException {
            /** write bytes[] to file   */
            byte[] content = text.getBytes();
            if(mode.equals("w")){
                OutputStream out =new FileOutputStream(path,false); // w
                out.write(content);
            }
            if(mode.equals("a")){
                OutputStream out =new FileOutputStream(path,true); // true 追加写 a+
                out.write(content);
            }
    
        }
        /** onetime r onetime w */
        static void readThenWrite(String src,String dest) throws IOException {
            InputStream in = new FileInputStream(src); //todo append可以追加,如果dest不存在自动创建;
            OutputStream out = new FileOutputStream(dest);
    
            // todo 一次性取多少字节
            byte[] bytes = new byte[1024];
            //todo 文件指针-1表示最后一行
            int num ;
            while ((num = in.read(bytes,0,bytes.length)) != -1) {
                //todo 一次转换每次读取的字节为string
                String str = new String(bytes,0,num); //这里可以实现字节到字符串的转换,比较实用
                System.out.println(str);
                //todo 每次写入多少字节
                out.write(bytes, 0, num);
            }
            //CLOSE STREAM
            in.close();
            out.close();
        }
    
        static String bufferRead(String src) throws FileNotFoundException,IOException {
    
            //读取文件(缓存字节流)
            BufferedInputStream in = new BufferedInputStream(new FileInputStream(src));
            //todo 一次性取多少字节
            byte[] bytes = new byte[2048];
            //接受读取的内容(n就代表的相关数据,只不过是数字的形式)
            int n = -1;
            String str="";
            while ((n = in.read(bytes,0,bytes.length)) != -1) {
                //转换成字符串
                str += new String(bytes,0,n);//charset utf-8 defaults
                //System.out.println(str);
            }
            in.close();
            return str.toString();
        }
    
        static  void  bufferWrite(String src,String dest) throws IOException {
            //读取文件(缓存字节流)
            BufferedInputStream in = new BufferedInputStream(new FileInputStream(src));
            //写入相应的文件
            BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(dest));
            //一次性取多少字节
            byte[] bytes = new byte[2048];
            //接受读取的内容(n就代表的相关数据,只不过是数字的形式)
            int n = -1;
            //todo 循环取出数据,长度为bytes.length
            while ((n = in.read(bytes,0,bytes.length)) != -1) {
                //转换成字符串
                String str = new String(bytes,0,n, StandardCharsets.UTF_8);
                System.out.println(str);
                //写入相关文件
                out.write(bytes, 0, n);
            }
            //清除缓存
            out.flush();
            //关闭流
            in.close();
            out.close();
    
        }
    
    
    }
    

      

  • 相关阅读:
    .NET基础篇——利用泛型与反射更新实体(ADO.NET Entity Framework)(转)
    反射奥秘
    ubuntu 安装chmsee
    ubuntu安装sublime,新立得
    Ubuntu 升级VisualBox后无法启动 Kernel driver not installed
    ubuntu安装stardict并导入词典
    PHP运行模式
    Ubuntu ibus输入法图标消失的解决办法
    MySQL 获得当前日期时间(以及时间的转换)
    mysql索引之or条件
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/12594008.html
Copyright © 2011-2022 走看看