`

使用Java操作二进制文件 示例

阅读更多

/*当我们对二进制的文件处理的时候,我们应该使用FileInputStream和FileOutputStream。

当我们操作文件的时候,可以首先使用File类得到对这个文件的引用,例如
File file = new File("Idea.jpg");然后把file作为参数传给FileInputStream或者FileOutputStream得到相应的输入流或者输出流。通常我们对文件无非是进行读写,修改,删除等操作。最重要的就是读写操作。当我们读文件的时候应该使用InputStream,写文件的时候使用OutputStream。read()方法是在InputStream中定义的,它是个抽象方法。InputStream当然也是个抽象类,我们得到的实例都是它的子类,例如FileInputStream,子类如果不是抽象类的话就要实现父类的抽象方法。在FileInputStream中不但实现了read()并且重载了这个方法提供了read(byte[] buffer)和read(byte[] buffer,int off,int length)两个方法。下面详细介绍一下:

    read()方法将读取输入流中的下一个字节,并把它作为返回值。返回值在0-255之间,如果返回为-1那么表示到了文件结尾。用read()我们可以一个一个字节的读取并根据返回值进行判断处理。
while((ch = image.read())!=-1)
{
     System.out.print(ch);
     newFile.write(ch);
}

    read(byte[] buffer)会把流中一定长度的字节读入buffer中,返回值为实际读入buffer的字节长度,如果返回-1表示已经到了流的末尾。
 while((ch = image.read(buffer))!=-1)
{
     System.out.println(ch);
     newFile.write(buffer);
}

    read(byte[] buffer,int off,int length)的意思是把流内length长度的字节写入以off为偏移量的buffer内,例如off=7,length=100的情况下,这个方法会从流中读100个字节放到buffer[7]到buffer[106]内。返回值为实际写入buffer的字节长度。
 while((ch = image.read(buffer,10,500))!=-1)
{
     System.out.println(ch);
     newFile.write(buffer,10,500);

}

    对上面的方法进行介绍的时候我们没有考虑异常的情况,读者应该参考API doc进行必要的了解。当我们对流操作的时候,有的时候我们可以对流进行标记和重置的操作,当然要流支持这样的操作。参考一下mark(),reset()和markSupported()方法的说明。最后在使用结束后,确保关闭流,调用close()方法。由于FileOutputStream的write相关的方法和FileInptutStream的read()非常类似,因此不再多说。下面提供一个例子说明如何对二进制文件进行操作,我们打开一个JPEG格式的文件,通过三种不同的方式读取内容,并生成一个新的文件。运行结束后你会发现这两个文件完全一样!

*/

import java.io.*;
public class LinkFile{
 public static void main(String[] args) throws IOException{
  linkBinaryFile("chj.jpg");
 }
 private static void linkBinaryFile(String fileName) throws IOException{
  File imageFile = new File(fileName);
  if(!imageFile.exists()&&!imageFile.canRead()){
   System.out.println("can not read the image or the image file doesn't exists");
   System.exit(1);
  }
   long length = imageFile.length();
   int ch = 0;
   System.out.println(length);
   byte[] buffer = new byte[(int)length/7];
   InputStream image = new FileInputStream(imageFile);
 
   File file = new File("hello.jpg");
   if(!file.exists()){
  file.createNewFile();
   }
   FileOutputStream newFile = new FileOutputStream(file,true);
 
   boolean go = true;
   while(go){
     System.out.println("please select how to read the file:\n"+
     "1: read()\n2:read(byte[] buffer)\n3:read(byte[] buffer,int off,int len)\n");
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
     String line = br.readLine();
     if(line.equals("1")){
       while((ch = image.read())!=-1){
     System.out.print(ch);
     newFile.write(ch);
    }
    }else if(line.equals("2")){
   while((ch = image.read(buffer))!=-1){
        System.out.println(ch);
    newFile.write(buffer);
   }
  }else if(line.equals("3")){
   while((ch = image.read(buffer,10,500))!=-1){
    System.out.println(ch);
    newFile.write(buffer,10,500);
   }
   for(int i = 0;i<10;i++){
   System.out.print(buffer[i]);
   }
  }
  go = false;
 }
 image.close();
 newFile.close();
 }
}
 

分享到:
评论

相关推荐

    java 将文件中二进制文件转换成文本文本文件并输出

    在Java编程语言中,将二进制文件转换为文本文档通常涉及到字符编码的理解和处理。二进制文件可以包含任何类型的数据,如图像、音频、视频或纯文本,但以非可读格式存储。而文本文档通常使用特定的字符编码(如ASCII...

    java 二进制文件的读写操作

    ### Java 二进制文件的读写操作 在Java中,进行二进制文件的读写操作是非常常见的需求,尤其是在处理非文本类型的文件(如图片、音频或视频等)时。本文将详细介绍如何使用`FileInputStream`和`FileOutputStream`类...

    Java:二进制方式读取文件

    本篇文章将基于提供的代码示例,深入探讨如何使用`FileInputStream`和`FileOutputStream`进行二进制文件的读取和写入,并分析其中的关键点和技术细节。 #### 关键类和方法介绍 1. **FileInputStream**: - **构造...

    java读取二进制文件

    ### Java读取二进制文件知识点详解 ...- 考虑到二进制文件的特殊性,尽量使用`DataInputStream`等高级流来进行操作,以简化数据读写过程。 以上就是关于“Java读取二进制文件”的详细介绍,希望对你有所帮助。

    利用Java读取二进制文件实例详解

    本文主要介绍了利用Java读取二进制文件的相关知识点,通过示例代码详细介绍了读取二进制文件的实现方法,对大家的学习或者使用Java具有一定的参考学习价值。 一、Java读取二进制文件的必要性 在计算机科学和信息...

    Java基于TCP方式的二进制文件传输

    主要为大家介绍了Java基于TCP方式的二进制文件传输,一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成,感兴趣的小伙伴们可以参考一下

    java的二进制操作

    在Java编程语言中,对二进制文件的操作是非常常见的需求之一,尤其是在处理图像、音频等非文本数据时。Java的标准库`java.io`提供了丰富的API来支持这些操作,其中`OutputStream`及其子类是进行二进制数据写入的核心...

    读取文件中的二进制文件 将输出到新的文件夹里

    本教程将详细介绍如何使用Java语言读取二进制文件并将其内容输出到新的文件夹中。 首先,我们要理解Java中的File类,这是操作文件的基础。File对象可以表示文件或目录路径,用于创建、删除、重命名文件以及获取文件...

    Java二进制IO类与文件复制操作实例

    本篇文章将深入探讨Java中的二进制IO类,并通过一个具体的文件复制操作实例来说明其应用。 1. **Java IO流基础** Java的IO流模型基于“流”的概念,数据被当作一串连续的数据流进行处理。IO流分为两类:字节流...

    读取二进制文件,JframeChart曲线图,查看文件修改时间

    在Java中,读取二进制文件通常使用`java.io`包中的`FileInputStream`类。通过创建`FileInputStream`对象并调用其`read()`方法,可以逐字节地读取文件内容。为了正确处理二进制数据,开发者需要了解文件格式,并可能...

    webservice4 二进制文件读取

    以下是一个简单的示例,展示了一个使用`byte[]`和`DataHandler`传输二进制文件的WebService类: ```java package service; import java.io.InputStream; import java.io.OutputStream; import java.io....

    【博客 Java调用MATLAB,将文件转换为二进制流】java+matlab程序

    这篇博客“Java调用MATLAB,将文件转换为二进制流”详细介绍了如何利用Java调用MATLAB的功能来处理文件,将其转换为二进制流。这种技术在数据处理、文件传输或存储等领域非常有用,因为二进制格式可以更高效地处理...

    Java把十进制转成二进制(任意进制)的程序

    在Java中,可以使用`Integer.toBinaryString()`方法来将一个整数转换为二进制字符串。例如: ```java int decimalNumber = 10; String binaryString = Integer.toBinaryString(decimalNumber); System.out.println...

    如何向MYSQL中写入二进制文件

    下面是一个使用Java读取MYSQL数据库中的二进制文件的示例代码: ```java package com.lizhe; import java.io.*; import java.sql.*; class GetImg { private static final String URL = "jdbc:mysql://localhost/...

    实现数据库二进制流转换成图片保存本地

    1. **连接数据库**:使用合适的数据库驱动(例如Java的JDBC,Python的psycopg2等)连接到数据库,获取存储图片的二进制字段。你需要知道数据库的URL、用户名、密码以及查询图片的SQL语句。 2. **读取二进制流**:...

    java连接Access2010读取图片二进制

    在给定的代码示例中,展示了如何使用Java连接到Access 2010数据库并读取存储为二进制流的图片数据,然后将这些二进制流转换回图片文件。以下是对这个过程的详细解释: 首先,为了连接到Access数据库,我们需要引入...

    在Android中调用二进制可执行程序

    但是,由于Android自身的特性(如应用程序的安全沙箱、资源管理机制等),直接在Android上运行二进制文件与在普通Linux系统上有所不同。 #### 知识点二:传统方式与新方法的区别 在Android中,通常有两种方式来...

    [JAVA]二进制字符串转十进制带异常抛出

    在Java中,我们可以使用`Integer.parseInt()`或`Integer.valueOf()`方法将二进制字符串转换为整数。这些方法接受两个参数:一个字符串和一个基数(在这种情况下是2,因为是二进制)。如果字符串无法转换为指定基数的...

    Hyperledger Fabric linux二进制文件

    本压缩包“hyperledger-fabric-linux-amd64-1.1.0”是针对Linux 64位系统的Hyperledger Fabric版本1.1.0的二进制文件,包含了运行和部署Fabric网络所需的全部组件。 1. **Hyperledger Fabric架构**:Hyperledger ...

    MySQL存取大文本及二进制文件(图片)

    综上所述,MySQL提供了存储大文本和二进制文件的能力,而Java的`BufferedInputStream`和`BufferedOutputStream`则是处理文件流、提高I/O效率的重要工具。正确理解和使用这些技术和数据类型,可以有效地管理和处理大...

Global site tag (gtag.js) - Google Analytics