在
从File类开始IO系统介绍一文中,我们详细的介绍了File类。这个类非常有用,我们可以用它作桥梁把文件和流轻松的联系起来。在Java IO专题中,我准备先介绍一些实用的关于Java IO编程方法,而不是先从整体来把握IO,因为我觉得那样效果并不好。当我们解决了这些平时开发中涉及到的问题后,再总结一下Java的IO系统。
当我们要对文件进行操作的时候,我们首先要确定我们对什么样的文件进行操作,是二进制的文件例如图片还是字符类型的文本文件,这非常的重要。当我们对二进制的文件处理的时候,我们应该使用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("Idea.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编程语言中,将二进制文件转换为文本文档通常涉及到字符编码的理解和处理。二进制文件可以包含任何类型的数据,如图像、音频、视频或纯文本,但以非可读格式存储。而文本文档通常使用特定的字符编码(如ASCII...
### Java 二进制文件的读写操作 在Java中,进行二进制文件的读写操作是非常常见的需求,尤其是在处理非文本类型的文件(如图片、音频或视频等)时。本文将详细介绍如何使用`FileInputStream`和`FileOutputStream`类...
本篇文章将基于提供的代码示例,深入探讨如何使用`FileInputStream`和`FileOutputStream`进行二进制文件的读取和写入,并分析其中的关键点和技术细节。 #### 关键类和方法介绍 1. **FileInputStream**: - **构造...
"C++,java读写二进制文件方法介绍" ...本文介绍了C++和Java中读写二进制文件的方法,包括文件流、文件指针的移动、文件操作等知识点。通过本文,读者可以了解到C++和Java中读写二进制文件的基本方法和注意事项。
### Java读取二进制文件知识点详解 ...- 考虑到二进制文件的特殊性,尽量使用`DataInputStream`等高级流来进行操作,以简化数据读写过程。 以上就是关于“Java读取二进制文件”的详细介绍,希望对你有所帮助。
JavaClass二进制文件是Java程序的核心组成部分,它包含了编译后的Java源代码,用于Java虚拟机(JVM)执行。在开发过程中,为了保护知识产权、防止恶意篡改或反编译,对JavaClass文件进行加密是至关重要的。"JAVA...
安装程序`setup.exe`可能是该软件的安装包,而`JavaClass二进制文件加密专家.txt`可能包含详细的使用指南、加密策略介绍或软件许可证信息。 在数字信号处理领域,虽然看似与JavaClass加密无关,但其实它们都涉及...
摘要:Java源码,文件操作,读取文件,二进制 Java读存大块二进制资料文件,java.io 包中提供了BufferedInputStream 和BufferedOutputStream 类来缓存的读写流。但是读写大块的数据文件时,使用这两个类的效果并不是很好...
在Java编程语言中,对二进制文件的操作是非常常见的需求之一,尤其是在处理图像、音频等非文本数据时。Java的标准库`java.io`提供了丰富的API来支持这些操作,其中`OutputStream`及其子类是进行二进制数据写入的核心...
JAVA二进制读写库(读取)
下面我们将深入探讨如何在Java中进行二进制文件的读写操作。 1. **字节流基础** Java提供了两种基本的字节流接口:`InputStream` 和 `OutputStream`。`InputStream` 用于读取数据,而 `OutputStream` 用于写入数据...
本教程将详细介绍如何使用Java语言读取二进制文件并将其内容输出到新的文件夹中。 首先,我们要理解Java中的File类,这是操作文件的基础。File对象可以表示文件或目录路径,用于创建、删除、重命名文件以及获取文件...
本篇文章将深入探讨Java中的二进制IO类,并通过一个具体的文件复制操作实例来说明其应用。 1. **Java IO流基础** Java的IO流模型基于“流”的概念,数据被当作一串连续的数据流进行处理。IO流分为两类:字节流...
在Java中,可以使用整型变量存储二进制数,然后通过普通的加法操作符"+"来执行加法,但需要注意处理进位的情况。 3. **二进制减法**: 与加法类似,减法也有特定的规则:0-0=0,0-1=-1(在二进制中,我们通常借位来...
在IT领域,二进制文件通常指的是非文本格式的数据文件,如图像、音频、视频、可执行程序等,它们由0和1组成的比特流构成。...了解这些知识点,有助于我们在实际工作中更有效地管理和操作二进制文件。
本篇文章将详细探讨如何在Java中打开并操作二进制文件,以及如何将修改后的二进制数据还原成原始文件。 首先,我们需要了解二进制文件。二进制文件是由二进制数据组成的,这些数据可以直接被计算机硬件理解和执行,...
在计算机科学中,二进制文件是存储非文本数据(如图像、音频、视频或程序)的文件,这些数据以二进制格式排列。...通过适当的技术和策略,我们可以高效地操作二进制文件,并保护其中的信息不被未经授权的访问。
在Java编程语言中,将十进制数转换为二进制、八进制和十六进制是常见的操作,尤其在处理计算机数据表示和计算时。本文将深入探讨这些转换方法。 首先,我们要理解不同进制系统的基础。十进制是我们日常生活最常用的...
XLS是Excel早期版本(97-2003)使用的二进制文件格式,用于存储表格数据、计算公式和其他相关数据。这种类通常包含方法来构建工作簿、工作表、单元格以及格式化数据等功能,允许开发者在服务器端生成Excel文件,供...
在本篇文章中,主要介绍了如何使用Java语言来解析包含字符串和图片的二进制文件。这一过程涉及到对二进制数据的读取和解析,具体实现的方法包括读取字符串的长度和内容,以及图片的数据长度和内容。下面将详细展开...