java的文件流:字节流(FileInputStream、FileOutputStream)和字符流(FileReader、FileWriter)。
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)。的更多相关文章
- (19)IO流之字符流FileReader和FileWriter,缓冲字符流---缓冲输入字符流BufferedReader和缓冲输出字符流BufferedWriter
字符流,读取的文件是字符的时候,有两个基类一个是Reader,一个是Writer这有点拟人的感觉,人直接看懂的是文字 字符流 字节流:读取的是文件中的二进制字节流并不会帮你转换成看的懂得字符 字符流: ...
- java基础之IO流(二)之字符流
java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...
- 021.3 IO流——字节流-FileInputStream读取字节
内容:文件读取方法,读取方法例子,read(buf)方法中buf的取值,字节流缓冲区对象—提高读取速度/// 文件读取方法:fis.read(),fis.read(buf),具体看例子 例子:文件读取 ...
- 【IO流】FileInputStream FileOutputStream BufferInputStream BufferOutputStream
FileInputStream IO流用来处理设备之间的数据传输. Java对数据的操作是通过流的方式. Java用于操作流的类都在IO包中. 流按流向分为两种:输入流,输出流. 流按操作类型分为两种 ...
- Java修炼——文件字节输入输出流复制和缓冲流复制
一:文件字节输入输出流复制 首先明确数据源和目的文件,然后就是"中转站",最后就是关闭 package com.bjsxt.ioproject; import java.io.Fi ...
- Java第三阶段学习(三、字符流、转换流)
一.字节流读取中文时出现的问题: 文件中有中文时,用字节流读取会出现乱码的问题,因为一个中文为两个字节. 二.字符编码表 编码表:其实就是生活中字符和计算机二进制的对应关系表. 1.ascii: 一个 ...
- IO流(一)__File对象和字符流FileWriter FileReader
IO流:IO流用来处理设备之间的数据传输,Java对于流的操作对象都在IO包中将外设中的数据读取到内存中:输入将内存的数写入到外设中:输出 流分为字节流和字符流字符流的由来:其实就是字节流读取文字字节 ...
- File类与常用IO流第五章——IO字符流
字符流,只能操作文本文件,不能操作图片.视频等非文本文件 字符输入流 java.io.Reader 字符输入流中一些共性的成员方法 int read():读取单个字符并返回. int read(cha ...
- IO流中将字节流转成字符流的方法
//字节流--->字符流 1. public class TestIO { public static void main(String[] args) throws IOException { ...
- 07 IO流(四)——文件字节流 FileInputStream/FileOutputStream与文件的拷贝
两个类的简述 专门用来对文件进行读写的类. 父类是InputStream.OutputStream 文件读入细节 FileOutputStream流的构造方法:new FileOutputStream ...
随机推荐
- Angular学习(7)- 模板2
示例: <!DOCTYPE html> <html ng-app="MyApp"> <head> <title>Study 8< ...
- 剑指offer系列62---两个链表的公共结点
[题目]输入两个链表,找出它们的第一个公共结点. * [思路]1 获取两链表的长度: * 2 让长的链表先走n步后此时走到短链表起始位置: * 3 两链表同时遍历,直至相同,这时返回第一个公共结点. ...
- 就Double、Decimal来说数据计算异常
场景: 客户提示发料时提示库存不足,可肉眼比对发料数量与库存数量没有一点问题. 但调度跟踪却发现出现“不可思议”的异常. 简单分析: 1.转Decimal再计算没问题.精度较高,存储方法也不一样,所以 ...
- 简单实例讲解linux的module模块编译步骤
注:原博文地址http://blog.sina.com.cn/s/blog_4ba5b45e0102v25h.html ---------------------------------------- ...
- [摘]PE中安装Windows 7/8
1. 用WinPE U盘启动盘进入电脑.2. 格式化C盘,C盘一定要是激活状态(活动状态).3. 把Win8的ISO文件提取到D:/win8下 4. 从提取的文件中拷备:bootmgr boot(整个 ...
- purgeIdleCellConnections: found one to purge conn = 0x1e09f7d0
purgeIdleCellConnections: found one to purge conn = 0x1e09f7d0 你在iOS6下使用3G网络时可能会遇到这条log,不用紧张,这只是苹果的工 ...
- OAF_EO系列7 - OAException异常处理及实现(案例)
2014-06-12 Created By BaoXinjian
- C#(结构体_枚举类型)
结构体一般定义在Main函数上面,位于Class下面,作为一个类:一般情况Struct定义在Main函数前面,Main函数里面的地方都可以使用,参数前面加上public代表公用变量. 用法 1 ...
- centos6配置远程桌面,使用xmanager访问
现在linux的图形界面越来越丰富,使用图形界面操作也逐渐成为使用者的一种习惯.在我们安装文件的过程中,经常会应用得到. 比如远程安装oracle,或者有多台主机.避免在不同主机间切换显示器. 1.检 ...
- python(22)总结下最近遇到的编码问题
最近爬取,或者解析网页是总是遇到编码问题(我的版本:python2.7) 一.常见异常:UnicodeEncodeError: 'ascii' codec can't encode character ...