理解JAVa处理文本文件及字节文件的方式

原创 2004年07月04日 19:47:00

在计算机中保存的数据都只是二进制符号并按字节为单位来保存,对计算机看来字符A并不是字符A,而只是一个没有意义的二进制数字是一个字节。我们利用JAVA的IO类进行读写数据的时候所提供的大部份的方法都是采用读写字节的方式,而且通过这种读写字节的方法是可以保存任可类型的数据的,因为任数据类型在计算机中都是字节码,前提是你要先将你写入的数据先转换成字节类型再通过输出流类输出,而要使得读取出来的数据对我们的程序有意义,我们必须将读取出来的字节按它保存时所表达的意义转换回来,如:保存的时候是char型的,那么我们就要把读取出来的字节数据类型转换成char类型还原它来所表达的意义,要不如果直接输出这个字节数据所得的仅仅是一个16进制的符号,对我们来说是没有意义的。所以,在JAVA里字节类型是一种万能的数据类型,也是数据在计算机里的真正面目。

JAVA的IO类为了方便我们输入输出那些基本的数据类型,基本上在各种的IO类里都提供了针对专门各种的基本数据类型的读写方法,这些方法其实是已经封装了那些转换代码了,如:readInt writeInt 等,但似乎就是没有提供读写STRING类型的方法,原因是JAVA提供了专门读写文本字符的IO类,如:reader writer这两个抽像基类,以及由其派生出来的子类都是专门用来读写文本字符的。因此,如果你要读取文本文件的都话就不要去用inputstrem outStrem这一系列的IO类了,而要使用reader writer 这系列的类了,因为它们不是针对文本的,如果非要用不可的话,你就要在程序中设定专门的程序代码来做这些字符的转换了。如下代码所示:

RandomAccessFile ra=new RandomAccessFile("c://1.txt","rw");  //RandomAccessFile类不支持字符的直接读写的

String s=new String("hello world"); 

ra.write(s.getBytes()); //将String转换成字节类型

byte buf[]=new byte[1024];   //定义一个字节数组用以接收读取到的字节数据

raf.read(buf,0,512);  //RandomAccessFile类不支持字符的直接读取
  
System.out.println("name:"+new String(buf));  //将读取出来的字节数据转换成String并输出。

这里还有一个问题,那就是字符编码的问题,在JAVA虚拟机上字符是以UNICODE的格式来表示的,而我们的机器则是以本地机字符集对字符编码的,所以存在同一个字符有两种不同的表示,因此,当我们想以GB2312也就是简体中文的格式来把这些字符保存在文件上,并以简体中文的格式在显示器(输出流)上显示这些字符,那么我们只得先将UNICODE格式的String转换成GB2312格式的字符编码即s.getBytes(),其实这个方法的作用是用本地的字符编码将UNICODE格式的字符编码转换成GB2312的编码,除非你的机器本地编码是采用UNICODE格式,否则这样的转换是免不了的,即使采用包装类也只是用方法来把这个转换过程隐藏了。JAVA采用UNICODE来做为JVM的字符编码,是因为UNICODE是全球的统一标准,有助于JAVA 的跨平台实现,但无奈现实中还是有很多系统仍然采用各自国家的字符编码,因此JAVA不得不提供一种方法来进行UNICODE与当地字符编码的转换。

java中复制文本文件的方式我总结为14种(按字符读取4中,按字节读取8种!??)

java中复制文件的方式 如果按照字符来读取的话,可以有4种, 第一种:加入缓冲区Buffered一次读取一个字符数组 public class CopyFileTest { public stat...
  • u012110719
  • u012110719
  • 2015年07月26日 15:36
  • 1157

统计文件中字符个数

所谓“文件”是指一组相关数据的有序集合。这个数据集有一个名称 叫做文件名。文件通常是驻留在外部介质上的,在使用的时候才调 入内存中。就文件的分类,有很多种分类方式,在这里我们看一下文件编码方式。 ...
  • hongbochen1223
  • hongbochen1223
  • 2015年09月02日 09:49
  • 2697

Scanner 文本文件读取与处理

利用 java.util.Scanner 这个工具,读取文本文件还是比较简单,只需要利用该类的一个构造方法 Scanner(File file),即可,需要传入一个文件对象,当然这就需要利用 java...
  • sunyanxiong123
  • sunyanxiong123
  • 2017年07月16日 22:37
  • 2022

3个字节的空txt文本文件

运行下面代码可以建立一个3个字节的空txt文本文件,想了解其原因的请参考文本文件的编码方式和unicode的具体资料,google上就有很多。System.IO.FileStream fs = new...
  • jinjazz
  • jinjazz
  • 2008年06月10日 18:14
  • 2349

字节的理解

内存中每一个字节都有一个确定其位置的地址,而每个变量在编译时都在内存分配连续的一定字节数的存储单元,不同类型的变量在内存分配的存储单元的大小不同。如字符型变量分配1个字节,整形变量分配2个连续字节,单...
  • Rain722
  • Rain722
  • 2016年04月29日 19:35
  • 650

C++文本文件读写的方法

掌握文本文件读写的方法 了解二进制文件的读写方法 C++文件流: fstream  // 文件流 ifstream  // 输入文件流 ofstream  // 输出文件流 //创建一个文本文件并...
  • xiaoshengforever
  • xiaoshengforever
  • 2013年09月21日 17:01
  • 3315

java字节文件输入流读文件

在下面程序中,读取一个文本文件,并将其显示到对话框上。 在编写程序前必须知道两件事: 1、怎样把一个流与一个文件联系起来。 2、用什么方法把从文件中读取的数据显示到对话框中。 import j...
  • Aguangg_6655_la
  • Aguangg_6655_la
  • 2017年04月15日 21:22
  • 399

使用Java操作文本文件

  使用Java操作二进制文件一文中讲述了如何使用Java处理二进制的文件,这篇文章主要讲述...
  • mingjava
  • mingjava
  • 2004年09月16日 08:42
  • 6574

Java中什么是字符文件,什么是字节文件?

理论上没有本质区别。所有的文件都是以二进制存储的,文件只有“文本文件”和“不是文本文件”这两种。只是因为里面的数据不同或者解析数据的方式不同而导致你看到的结果不同。下面给你非常详细的解释:“字符文件”...
  • comeandgo201205
  • comeandgo201205
  • 2017年06月20日 13:56
  • 292

Java处理带BOM(字节顺序标记)的文本

说起BOM,这个问题还比较麻烦,因为BOM不可见,但用程序做不同编码文本处理时候却常常需要考虑到BOM的问题。在此之前,先对BOM做个简单认识。 先看看带BOM的文件:(下载这个文件) 源文件: ...
  • liuzx32
  • liuzx32
  • 2015年03月06日 11:21
  • 788
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:理解JAVa处理文本文件及字节文件的方式
举报原因:
原因补充:

(最多只允许输入30个字)