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

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

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

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

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

4、关闭文件流

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

以字节流方式:

 package zdxtest;
import java.io.*;
public class TestFile1 { public static void main(String[] args) {
// TODO Auto-generated method stub
//字节流输入输出,向一个文件写入内容然后读出
File f = new File("d:\\1.txt");
FileOutputStream fos = null;
FileInputStream foi = null;
String sin = "今天是七月最后一天";
//创建文件,如果目录下存在文件,先删除再创建
if (f.exists()) {
f.delete();
try {
f.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else{
try {
f.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//实例化字节流子类:FileOutputStream
try {
fos = new FileOutputStream(f);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//以字节的方式写入文件并关闭流
byte[] b = sin.getBytes();
try {
fos.write(b);
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//实例化字节流子类:FileInputStream
try {
foi = new FileInputStream(f);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//以字节的方式读取文件并关闭流
byte[] c = new byte[1000];
int l=0;
try {
/*l = foi.read();
while(l!=-1){
System.out.println(String.valueOf(l));
l=foi.read();
}*/
l = foi.read(c);
foi.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String o = new String(c);
System.out.println(o); //打印文件内容
System.out.println(l); //打印读取的字节数 } }

运行后输出:

今天是七月最后一天

27

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

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

 package zdxtest;
import java.io.*; public class FileTest2 { public static void main(String[] args) {
// TODO Auto-generated method stub
File f = new File("d:\\2.txt");
FileReader fr = null;
FileWriter fw = null;
String s = "明天是八月第一天";
//创建文件,如果目录下存在文件,先删除再创建
if(f.exists())
{
f.delete();
try {
f.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else{
try {
f.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//实例化字符流子类:FileWriter,以字符的方式写入文件并关闭流
try {
fw = new FileWriter(f);
fw.write(s);
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//实例化字符流子类:FileReader,以字符的方式读取文件并关闭流
char [] b = new char[1000];
int l = 0;
try {
fr = new FileReader(f);
l = fr.read(b);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(new String(b)); //打印文件内容
System.out.println(l); //打印读取的字符数
} }

运行输出:

明天是八月第一天

8

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

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

  1. (19)IO流之字符流FileReader和FileWriter,缓冲字符流---缓冲输入字符流BufferedReader和缓冲输出字符流BufferedWriter

    字符流,读取的文件是字符的时候,有两个基类一个是Reader,一个是Writer这有点拟人的感觉,人直接看懂的是文字 字符流 字节流:读取的是文件中的二进制字节流并不会帮你转换成看的懂得字符 字符流: ...

  2. java基础之IO流(二)之字符流

    java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...

  3. 021.3 IO流——字节流-FileInputStream读取字节

    内容:文件读取方法,读取方法例子,read(buf)方法中buf的取值,字节流缓冲区对象—提高读取速度/// 文件读取方法:fis.read(),fis.read(buf),具体看例子 例子:文件读取 ...

  4. 【IO流】FileInputStream FileOutputStream BufferInputStream BufferOutputStream

    FileInputStream IO流用来处理设备之间的数据传输. Java对数据的操作是通过流的方式. Java用于操作流的类都在IO包中. 流按流向分为两种:输入流,输出流. 流按操作类型分为两种 ...

  5. Java修炼——文件字节输入输出流复制和缓冲流复制

    一:文件字节输入输出流复制 首先明确数据源和目的文件,然后就是"中转站",最后就是关闭 package com.bjsxt.ioproject; import java.io.Fi ...

  6. Java第三阶段学习(三、字符流、转换流)

    一.字节流读取中文时出现的问题: 文件中有中文时,用字节流读取会出现乱码的问题,因为一个中文为两个字节. 二.字符编码表 编码表:其实就是生活中字符和计算机二进制的对应关系表. 1.ascii: 一个 ...

  7. IO流(一)__File对象和字符流FileWriter FileReader

    IO流:IO流用来处理设备之间的数据传输,Java对于流的操作对象都在IO包中将外设中的数据读取到内存中:输入将内存的数写入到外设中:输出 流分为字节流和字符流字符流的由来:其实就是字节流读取文字字节 ...

  8. File类与常用IO流第五章——IO字符流

    字符流,只能操作文本文件,不能操作图片.视频等非文本文件 字符输入流 java.io.Reader 字符输入流中一些共性的成员方法 int read():读取单个字符并返回. int read(cha ...

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

    //字节流--->字符流 1. public class TestIO { public static void main(String[] args) throws IOException { ...

  10. 07 IO流(四)——文件字节流 FileInputStream/FileOutputStream与文件的拷贝

    两个类的简述 专门用来对文件进行读写的类. 父类是InputStream.OutputStream 文件读入细节 FileOutputStream流的构造方法:new FileOutputStream ...

随机推荐

  1. 构建VIM下的C++编程环境

    1.VIM配置 Vim强大的配置与功能,其来源基本上就两个地方:Vim插件以及Vim配置文件. Vim本身的系统配置文件夹是在/usr/share/vim/和/etc/vim/两个文件夹下.一般情况下 ...

  2. 【linux】grub加密

    1.计算grub的MD5加密密码: #grub-md5-crypt Password: Retype password:输入两遍密码进行确认以后,就会计算出你所输入密码的MD5加密值,如:$1$pFd ...

  3. WPF 数据绑定

    1.1绑定到对象 1.1.1.前台绑定 前台代码 5: </Grid> 1: <Grid x:Name=”GridProductDetails”> 2:   3: <Te ...

  4. Tomcat在eclipse中起动成功,主页却打不开

    症状: tomcat在eclipse里面能正常启动,而在浏览器中访问http://localhost:8080/不能访问,且报404错误.同时其他项目页面也不能访问. 关闭eclipse里面的tomc ...

  5. 从SVN导出指定版本号之间修改的文件

    当一个网站项目进入运营维护阶段以后,不会再频繁地更新全部源文件到服务器,这个时间的修改大多是局部的,因此更新文件只需更新修改过的文件,其他 没有修改过的文件就没有必要上载到服务器.但一个稍微上规模的网 ...

  6. PHP加密解密类

    <?php class Mypass { static function encrypt($data, $key){ $key = md5($key); $x = 0; $len = strle ...

  7. 单选按钮选中js的处理

    function FinancialinfosetController($scope, $http, $timeout, $location, $rootScope, $routeParams) { ...

  8. Hadoop MapReduce编程学习

    一直在搞spark,也没时间弄hadoop,不过Hadoop基本的编程我觉得我还是要会吧,看到一篇不错的文章,不过应该应用于hadoop2.0以前,因为代码中有  conf.set("map ...

  9. yuv422/yuv420格式

    关于YUV格式 转载:http://www.cnblogs.com/soniclq/archive/2012/02/02/2335974.html YUV 格式通常有两大类:打包(packed)格式和 ...

  10. 问对于一个给定的n,怎样才能用最少的步骤将它变到1

    如果n为偶数,则将它除以2,如果n为奇数,则将它加1或者减1.问对于一个给定的n,怎样才能用最少的步骤将它变到1.例如:n= 61n-- 60n/2 30n/2 15n++ 16n/2 8n/2 4n ...