使用Java操作二进制文件 (转)
来源:互联网 发布:ip反向解析域名 编辑:程序博客网 时间:2024/05/27 20:44
使用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("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操作二进制文件 (转)
- 使用Java操作二进制文件
- 使用Java操作二进制文件
- 使用Java操作二进制文件
- 使用Java操作二进制文件 示例
- Java 二进制文件读写操作
- Java读写二进制文件操作
- Java读写二进制文件操作
- Java读写二进制文件操作
- ~~~二进制文件操作~~~
- ~~~二进制文件操作~~~
- 二进制文件操作
- Java sqlite转json二进制文件
- [转]c++: fstream文件操作及对二进制文件的操作
- Java 文本文件和二进制文件的读取(转)
- (原创)二进制文件操作类
- C#的二进制文件操作
- Qt二进制文件操作
- 第一次用CSDN BLOG感受
- DataGridView新特色(vs2005)
- java 练习题 得到浮点数的整数部分和小数部分
- 基于 Windows 的精确定时
- left join/right join/inner join
- 使用Java操作二进制文件 (转)
- SQL Server 2005 数据类型简述
- 如何处理ASP.NET 2.0配置文件
- ArcIMS的学习论坛
- 王志东进军即时通讯 Lava-Lava部落版上线
- 在Visual Studio 2005的DataGridView控件中加入ComboBox下拉列表框的实现(C#)
- GIS学习论坛
- tarbux 又一个1美分的点击大站,每天10个以上1美分点击
- 用Visual C++实现局域网IP多播(转自天极)最近搞ip对讲涉及到的,收集用