您的位置:

java字节流,JAVA字节流怎么输出中文

本文目录一览:

Java 字节流问题(求大神,急!!!)

本来看有人给你回答了也就不写了,但是发现问题就在于你是需要字节流,那人回答使用的是字符流。

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

public class WordsCount {

public static void main(String[] args) {

File fRead = new File("D:\\test.txt");

File fWrite = new File("D:\\count.txt");

try {

FileInputStream fis = new FileInputStream(fRead);

FileOutputStream fos = new FileOutputStream(fWrite);

int ch;

int count = 0;

while((ch = fis.read()) != -1) {

if((char)ch == 'a') {

count++;

}

}

//如果直接将count直接写入就会出现问题,例如:a的字符是7个,写入后就是ascii 7 ,打开就是乱码,所以下面需要处理

String temp = "" + count;

byte[] b = temp.getBytes();

fos.write(b);

fis.close();

fos.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

字节流的基本操作

在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据时要使用输入流读取数据,而当程序需要将一些数据保存起来时,就要使用输出流。可以通过下图表示输入和输出的关系。

在java.io中流的操作主要有字节流、字符流两大类,均有输入和输出操作。字节流中输出数据主要使用OutputStream类完成,输入使用的是InputStream类。字符流中输出主要是使用Writer类完成,输入主要是使用Reader类完成。

1.字节输出流

字节流主要操作byte类型数据,以byte数组为准,主要操作类是OutputStream类和InputStream类。

OutputStream类是一个抽象类,如果要使用此类,则首先必须通过子类实例化对象。如果现在要操作的是一个文件,则可以使用FileOutputStream类,通过向上转型后,可以为OutputStream实例化。

范例: 向文件中写入字符串

程序运行结果:

内容已成功地写入到文件中,以上程序在实例化、写、关闭时都有异常发生,为了方便起见,直接在主方法上使用throws关键字抛出异常,可以减少try...catch语句。

2.追加新内容

在之前的所有操作中,如果重新执行程序,肯定会覆盖文件中的已有内容,此时可以通过FileOutputStream向文件中追加内容,FileOutputStream的另外一个构造方法如下:

如果将append的值设置为true,则表示在文件的末尾追加内容。

范例: 修改之前的程序,追加文件内容

程序运行结果

可以发现,每次执行后,内容会自动追加到文件的末尾。

3.字节输入流InputStream

既然可以用程序向文件中写入内容,那么也可以通过InputStream从文件中把内容读取进来。InputStream类和OutputStream类一样本身也是一个抽象类,必须依靠其子类。如果从文件中读取,子类肯定是FileInputStream。

FileInputStream类的构造方法如下:

范例: 从文件中读取内容

程序运行结果:

内容为:Hello World!!!Hello World!!!

文件的内容已经被读取出来,但是后面有很多个空格,这是因为开辟的byte数组大小为1024,而实际的内容只有28个字节,在这之后存在 996个空白的空间,在将byte数组变为字符串时也将这996个无用的空间转为字符串,这样不仅浪费空间,也不合理。可以使用read()方法上的返回值,此返回值表示向数组中写入了多少个数据。

范例: 修正以上错误

程序运行结果:

此时的程序已不再产生多余的空格,因为在程序最后输出时将byte数组指定范围中的内容变成了字符串。

除以上方法外,也可以通过循环从文件中一个个地把内容读取出来,直接使用read()方法即可。

范例: 使用read()通过循环读取

程序运行结果:

以上程序是在明确知道具体数组大小的前提下开展的,如果此时不知道要输入的内容有多大,则只能通过判断是否读到文件末尾的方式来读取文件。能否有根据内容大小自调整的方法?

范例: 另一种方式的读取

程序运行结果:

文件读到末尾,则返回的内容为-1。因此当temp接收到的内容为-1时,输入流的内容也读到底,才会返回-1,通过-1可以判断输入流中是否还有其他内容。

Java中什么是字节流

字节流(byte

stream)

不包含边界数据的连续流

字节流是由字节组成的,字符流是由字符组成的.

Java里字符由两个字节组成.字节流是最基本的,所有的InputStrem和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化。