美文网首页
JAVA(一)文件流的输入和输出

JAVA(一)文件流的输入和输出

作者: 文子轩 | 来源:发表于2018-06-26 12:31 被阅读39次

    一.java输入流类

    String strFile = "Data/DataGroup.cpp";
     输入读取文件路径
    
    File = new File(strFile);
    引入File.io包,实例化文件对象
    
    InputStream in = null; 
     定义文件输入流
    
    in = new FileInputStream(file);
    文件输入流读取文件
    创建合适文件大小的数组,一次性把数据从文件中读出
    
    b1 = new byte[(int)file.length()]  ;
    当内容为空时返回-1,可以以此作为判断文件内容是否读取完毕        
    
    in.read(b1);       
     读取文件中的内容到b[]数组,如果read()返回读取的字节内容,
    in.close();
    关闭
    textArea.append(new String(b1));
    

    二.文件输出流

    String strOut = "*Data/DataGroup_copy.cpp";
    
    File file = new File(strOut);
    
    OutputStream output = null;
    
    output = new FileOutputStream(file);
      输出流中写入文件内容
    output.write(b1);
    读取输入流中b1的字节数组
    
    output.close();
    

    三.工作中的输入输出流

    • 工作上的文件输入输出流都要判断流是否读取完整

      while(((len0 = fis.read(buf)) != -1)){
            baos.write(buf, 0, len0);
        }  
      bao代表上面的b1字节数组
      
    • System.arrayCopy

    public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
        代码解释:
       Object src : 原数组
       int srcPos : 从元数据的起始位置开始
      Object dest : 目标数组
       int destPos : 目标数组的开始起始位置
      int length  : 要copy的数组的长度
    

    例如

      //2.写入文件名本身
        System.arraycopy(fnameBytes, 0, bytes, 4, fnameBytes.length);
    

    四.压缩程序

        public class Archiver {
            public static void main(String[] args) throws Exception {
                FileOutputStream fos = new FileOutputStream("d:/arch/x.xar",true);
                fos.write(addFile("d:/pie.png"));
                fos.close();
            }
            
            /**
             * path : d:/xxx/xxx/a.jpg
             */
            public static byte[] addFile(String path) throws Exception{
                //文件
                File f = new File(path);
                //文件名
                String fname = f.getName();
                //文件名数组
                byte[] fnameBytes = fname.getBytes() ;
                //文件内容长度
                int len = (int)f.length();
                
                //计算总长度
                int total = 4 + fnameBytes.length + 4 + len ;
                
                //初始化总数组
                byte[] bytes = new byte[total];
                
                //1.写入文件名长度
                byte[] fnameLenArr = Util.int2Bytes(fnameBytes.length);
                System.arraycopy(fnameLenArr, 0, bytes, 0, 4);
                
                //2.写入文件名本身
                System.arraycopy(fnameBytes, 0, bytes, 4, fnameBytes.length);
                
                //3.写入文件内容长度
                byte[] fcontentLenArr = Util.int2Bytes(len);
                System.arraycopy(fcontentLenArr, 0, bytes, 4 + fnameBytes.length, 4);
                
                //4.写入文件内容
                //读取文件内容到数组中
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                FileInputStream fis = new FileInputStream(f);
                byte[] buf = new byte[1024];
                int len0 = 0 ;
                while(((len0 = fis.read(buf)) != -1)){
                    baos.write(buf, 0, len0);
                }
                fis.close();
                //得到文件内容
                byte[] fileContentArr = baos.toByteArray();
                System.arraycopy(fileContentArr, 0, bytes, 4 + fnameBytes.length + 4, fileContentArr.length);
                return bytes ;
            }
        }
    

    相关文章

      网友评论

          本文标题:JAVA(一)文件流的输入和输出

          本文链接:https://www.haomeiwen.com/subject/rumpyftx.html