java的文件流:字节流(FileInputStream、FileOutputStream)和字符流(FileReader、FileWriter)。

java的输入输出建立在4个抽象类的基础上:InputStream、OutputStream、Reader、Writer。InputSream和OutputStream被设计成字节流类,而Reader和Writer被设计成字符流类。一般来说,处理字符或者字符串时应该使用字符流类,处理字节或者二进制对象时应该使用字节流类。

  一般在操作文件流时,不管是字节流还是字符流,都可以按照以下的方式进行。

1、使用File类找到一个文件

2、通过File类实例化字节流或字符流

3、进行字节(字符)的读写操作

4、关闭文件流

下面是2个例子,向文件中写入字符串并读出。

以字节流方式:

 1 package zdxtest;
 2 import java.io.*;
 3 public class TestFile1 {
 4
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         //字节流输入输出,向一个文件写入内容然后读出
 8         File f = new File("d:\\1.txt");
 9         FileOutputStream fos = null;
10         FileInputStream foi = null;
11         String sin = "今天是七月最后一天";
12         //创建文件,如果目录下存在文件,先删除再创建
13         if (f.exists()) {
14             f.delete();
15             try {
16                 f.createNewFile();
17             } catch (IOException e) {
18                 // TODO Auto-generated catch block
19                 e.printStackTrace();
20             }
21         }
22         else{
23             try {
24                 f.createNewFile();
25             } catch (IOException e) {
26                 // TODO Auto-generated catch block
27                 e.printStackTrace();
28             }
29         }
30         //实例化字节流子类:FileOutputStream
31         try {
32             fos = new FileOutputStream(f);
33         } catch (FileNotFoundException e) {
34             // TODO Auto-generated catch block
35             e.printStackTrace();
36         }
37         //以字节的方式写入文件并关闭流
38         byte[] b = sin.getBytes();
39         try {
40             fos.write(b);
41             fos.close();
42         } catch (IOException e) {
43             // TODO Auto-generated catch block
44             e.printStackTrace();
45         }
46         //实例化字节流子类:FileInputStream
47         try {
48             foi = new FileInputStream(f);
49         } catch (FileNotFoundException e) {
50             // TODO Auto-generated catch block
51             e.printStackTrace();
52         }
53         //以字节的方式读取文件并关闭流
54         byte[] c = new byte[1000];
55         int  l=0;
56         try {
57             /*l = foi.read();
58             while(l!=-1){
59                 System.out.println(String.valueOf(l));
60                 l=foi.read();
61             }*/
62             l = foi.read(c);
63             foi.close();
64         } catch (IOException e) {
65             // TODO Auto-generated catch block
66             e.printStackTrace();
67         }
68         String o = new String(c);
69         System.out.println(o); //打印文件内容
70         System.out.println(l); //打印读取的字节数
71
72     }
73
74 }

运行后输出:

今天是七月最后一天

27

为什么是27个字节呢,因为我eclipse的默认编码方式是UTF-8,在UTF-8编码方式中,一个汉字是占有三个字节的,一共9个汉字,所以是27个字节。

再来看以字符流的方式实现:

 1 package zdxtest;
 2 import java.io.*;
 3
 4 public class FileTest2 {
 5
 6     public static void main(String[] args) {
 7         // TODO Auto-generated method stub
 8         File f = new File("d:\\2.txt");
 9         FileReader fr = null;
10         FileWriter fw = null;
11         String s = "明天是八月第一天";
12         //创建文件,如果目录下存在文件,先删除再创建
13         if(f.exists())
14         {
15             f.delete();
16             try {
17                 f.createNewFile();
18             } catch (IOException e) {
19                 // TODO Auto-generated catch block
20                 e.printStackTrace();
21             }
22         }
23         else{
24             try {
25                 f.createNewFile();
26             } catch (IOException e) {
27                 // TODO Auto-generated catch block
28                 e.printStackTrace();
29             }
30         }
31         //实例化字符流子类:FileWriter,以字符的方式写入文件并关闭流
32         try {
33             fw = new FileWriter(f);
34             fw.write(s);
35             fw.close();
36         } catch (IOException e) {
37             // TODO Auto-generated catch block
38             e.printStackTrace();
39         }
40         //实例化字符流子类:FileReader,以字符的方式读取文件并关闭流
41         char [] b = new char[1000];
42         int l = 0;
43         try {
44             fr = new FileReader(f);
45             l = fr.read(b);
46         } catch (IOException e) {
47             // TODO Auto-generated catch block
48             e.printStackTrace();
49         }
50         System.out.println(new String(b));  //打印文件内容
51         System.out.println(l);    //打印读取的字符数
52     }
53
54 }

运行输出:

明天是八月第一天

8

一共8个汉字,一个char存储一个汉字,所以是8个字符

时间: 2024-10-13 03:40:34

java的文件流:字节流(FileInputStream、FileOutputStream)和字符流(FileReader、FileWriter)。的相关文章

IO流(三):字符流及其缓冲流

一.字符流概述 (一).本质 1.字节流操作中文数据不是特别的方便,所以就出现了转换流. 转换流的作用就是把字节流转换字符流来使用. 2.转换流其实是一个字符流. 字符流 = 字节流 + 编码表 (二)编码表 1.编码表简介: ASCII ISO-8859-1 GB2312 GBK GB18030 UTF-8 (三)String中的编码 1.内容: 1)编码 String --> byte[] byte[] getBytes(String charsetName):使用指定的字符集合把字符串编码

IO流上:概述、字符流、缓冲区

一.IO流概述 概述: IO流简单来说就是Input和Output流,IO流主要是用来处理设备之间的数据传输,java对于数据的操作都是通过流实现,而java用于操作流的对象都在IO包中. 分类: 按操作数据分为:字节流和字符流. 如:Reader和InpurStream 按流向分:输入流和输出流.如:InputStream和OutputStream IO流常用的基类: * InputStream    ,    OutputStream 字符流的抽象基类: * Reader       ,  

IO流中将字节流转成字符流的方法

//字节流--->字符流 1. public class TestIO { public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("c:/abc.txt");// 字节流 InputStreamReader isr = new InputStreamReader(fis);// 字符流 BufferedReader br = new

Java IO流 之 InputStreamReader 字节流转字符流

http://www.verejava.com/?id=16994667084611 package com.io; import java.io.*; public class TestInputStreamReader { public static void main(String[] args) { InputStream is=null; try { is=new FileInputStream("res/chinese.txt"); //将inputStream 转换成 R

Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十三)定义一个avro schema使用comsumer发送avro字符流,producer接受avro字符流并解析

参考<在Kafka中使用Avro编码消息:Consumer篇>.<在Kafka中使用Avro编码消息:Producter篇> pom.xml <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>0.10.0.1</version> </dependenc

Java文件字节流和字符流FileInputStream,FileOutputStream,FileReader,FileWriter

一,文件输入流和文件输出流:FileInputStream,FileOutputStream FileInputStream可以使用read()方法一次读入一个字节,并以int类型返回,或者是使用read()方法时读入至一个byte数组,byte数组的元素有多少个,就读入多少个字节.在将整个文件读取完成或写入完毕的过程中,这么一个byte数组通常被当作缓冲区,因为这么一个byte数组通常扮演承接数据的中间角色. int read();int read(byte b[]);int read(byt

Java基础知识强化之IO流笔记22:FileInputStream / FileOutputStream 复制文本文件案例

1. 使用字节流FileInputStream / FileOutputStream 复制文本文件案例: 分析: (1)数据源:从哪里来 a.txt   --   读取数据  --  FileInputStream (2)目的地:到哪里去 b.txt   --   写数据    --   FileOutputStream 2. 代码示例: 1 package cn.itcast_03; 2 3 import java.io.FileInputStream; 4 import java.io.Fi

Java——文件操作字符流和字节流的区别

转:http://blog.csdn.net/joephoenix/articles/2283165.aspx java的IO流分两种流 字节流 InputStream OutputStream 字符流 Reader Writer 他们都是抽象类 具体实现 字节流 FileInputStream FileOutputStream 字符流 FileReader FileWriter 字符流处理的单元为2个字节的Unicode字符,分别操作字符.字符数组或字符串,而字节流处理单元为1个字节,操作字节

java中字节流与字符流的区别

字节流 在I/O类库中,java.io.InputStream和java.io.OutputStream分别表示字节输入流和字节输出流,它们都是抽象类,不能实例化,数据流中的最小单位是字节,所以叫做字节流. 一.InputStream中的读取数据的方法如下: 1 .int read() 功能:读取一个字节的数据,并且返回读到得数据,如果返回-1,则表示读到输入流的末尾. 2.int read(byte[] b) 功能:从输入流中读取一定量的字节,并将其存储在字节数组b中,返回实际读取的字节数,如

黑马程序员--Java基础学习笔记【IO流-字节流、转换流】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- IO 流 常用基类 字节流 InputStreamOutputStream 常用方法 int read() // 读取一个字节,以 int 形式返回 intread(byte[] b) // 读取最多数组长度个字节并存入该数组,返回实际读取字节 void write(int d) // 写出一个字节 voidwrite(byte[] d) // 将给定字节数组中的所有字节全部写出 void w