美文网首页
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 ;
        }
    }

相关文章

  • IO系统

    内容梗概: Java流式输入/输出的原理 Java流类的分类 输入/输出流类 常见的节点流和处理流 文件流 缓冲流...

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

    一.java输入流类 二.文件输出流 三.工作中的输入输出流 工作上的文件输入输出流都要判断流是否读取完整whil...

  • IO流

    # Java 流式输入 输出原理 # Java 流的分类 # 输入 输出 流 类 # 常见的节点流 和 处理流 #...

  • Java IO流

    标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流等等,java中将输入输出抽象称为流,就好...

  • Java IO学习笔记(结合了他人的博客)

    Java中使用IO(输入输出)来读取和写入,读写设备上的数据、硬盘文件、内存键盘。根据数据的走向分为输入流和输出流...

  • Java IO中的其他流的使用

    本文主要介绍Java IO中的其他几种流: 标准输入、输出流 打印流 数据流 对象流 随机存取文件流 标准输入、输...

  • I/O流

    输入输出流 Java.io包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。Java.i...

  • Java-IO

    IO:Java数据的 输入\输出 数据流:根据流向分为输入流(InputStream\Reader)和输出流(Ou...

  • Kotlin I/O 与文件管理(1)Java I/O 流概述

    Java I/O 流概述Java 流设计理念Java 流类继承层次字节输入流字节输出流字符输入流字符输出流   K...

  • Java学习——day 16

    主要内容 使用输入流和输出流实现文件的拷贝 字符流 笔记详情 1. 使用输入流和输出流实现文件的拷贝 2. 字符流...

网友评论

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

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