Java---30---IO(一)

IO流常用基类:

字节流常用基类:

InputStream,OutputStream

字符流常用基类:

Reader  Writer

转换流:

InputStreamReader:字节流通向字符流的桥梁   用于操作字节流的字符流对象

OutputStreamWriter:字符流通向字节流的桥梁   用于操作字符流的字节流对象

由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀

字符流Reader&Writer的使用方法:

1.创建:

以FileReader FileWriter为例

创建FileReader对象:

FileRead fr = new FileReader ("demo.txt");

创建FileWriter对象:

FileWriter fw = new FileWriter ("demo.txt");

该文件会自动创建到指定的文件夹下,若是有同名文件,将会把原来的覆盖。

创建时会发生异常,需进行异常的处理。

2.读取/写入:

fr.read() 结束标志:返回值为-1

一次读一个,自动往下读

可以这么做:

int len = 0;

while ((len = fr.read()) != -1){
	System.out.println (len);//打印出结果是数字,可强制转换
}

一次读一个数组,自动往下读

可以这么做:

char buf[] = new char[1024];
int num = 0;
while ((num = fr.read(buf)) != -1){
	System.out.println (new String (buf));
}

写入就简单很多了

fw.write("shdsdhksldlksjdlksjdkl");
fw.flush ();//刷新,将内容刷进目的地

3.关闭字符流对象:

fr.close ();
fw.close ();

关闭之前一定要先判断该对象是否被创建了。

4.异常的处理:

以FileWriter为例,FileReader也是一样的。

FileWriter fw = null;
try {
	fw = new FileWriter("demo.txt");

	fw.write("sssssssssssssssssss");

} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} finally {
	try {
		if (fw != null) {
			fw.close();
		}
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

5.使用缓冲区提高效率:

缓冲区的出现时为了提高流的读取效率,所以在创建缓冲区之前必须要有流对象.

创建:

将需要提高效率的流对象作为参数传递给缓冲区的构造函数。

BufferedReader  bufr = new BufferedReader (new FileReader ("demo.txt"));
BufferedWriter bufw = new BufferedWriter (new FilrWriter ("demo.txt"));

写入/读取

读取:

缓冲区新提供了一个高效的方法readLine ()一次读一行

String line = bufr.readLine ();

System.out.println (line);

写入:

bufw.write ("dsadsadsadsadsafrfg");
bufw.flush ();

关闭缓冲区:

关闭缓冲区之后就不必再关闭字符流对象了

bufr.close();
bufw.close ();

字节流 的使用方法:

1.创建:

FileOutputStream fos = new FileOutputStream ("demo.txt");

会自动创建,若有同名文件将会覆盖。

FileInputStream fis = new FileInputStream ("demo.txt");

2.读取/写入

写入:

fos.write ("dsadsadsadwerfetrythy");
fow.flush ();

读取:

一次读一个

int len = 0;
while ((len = fis.read ()) != -1){
	System.out.println ((char)ch);
}

一次读一数组:

byte buf[] = new byte [1024];
int len = 0;
while ((len = fis.read (buf)) != -1){
	System.out.println (new String (buf,0,len));
}
byte buf[] = new byte[fis.available()];//估计字节数
int len = 0;
while ((len  = fis.read (buf)) != -1){
	System.out.println (new String (buf,0,len));
}

4.缓冲区

将需要被提高效率的字节流对象作为参数传递给缓冲区的构造函数.

BufferedOutputStream bufos = new BufferedOutputStream (new FileOutputStream ("demo.txt"));
BufferedInputStream bufis = new BufferedInputStream (new FileInputStream("demo.txt"));

5.关闭

有缓冲区的时候,只需要关闭缓冲区就好,没有的话调用close方法关闭流对象。

转换流:

InputStreamReader:字节流通向字符流的桥梁   用于操作字节流的字符流对象

OutputStreamWriter:字符流通向字节流的桥梁   用于操作字符流的字节流对象

1.创建:

将字节流转换为字符流对象,使用转换流

FileInputStream fis = new FileInputStream ("demo.txt");
InputStreamReader isr = new InputStreamReader (fis);
两句写成一句
InputStreamReader isr = new InputStreamReader (new FileInputStream ("demo.txt"));
FileOutputStream fis = new FIleOutputStream ("demo.txt");
OutputStreamWriter osw = new OutputStreamWriter (fis);
两句写成一句
OutputStreamWriter osw = new OutputStreamWriter (new FileOutputStream ("demo.txt"));

2.写入/读取

写入:

osw.write ("sgydgasddsagukwe");

读取:

int len = 0;

while ((len = isr.read()) != -1) {
	System.out.print((char)len);
}

3.缓冲区

FileInputStream fis = new FileInputStream ("demo.txt");
InputStreamReader isr = new InputStreamReader (fis);
BufferedReader bufr = new BufferedReader (isr);
三句成一句:
BufferedReader bufr = new BufferedReader (new InputStreamReader (new FileInputStream ("demo.txt")));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("demo.txt")));
时间: 2024-10-20 14:41:58

Java---30---IO(一)的相关文章

java之IO流

知识点: java.io包中:类File:实现的接口:Serializable,Comparable<File> 含义:文件和目录路径名的抽象表示形式.  [抽象路径名 中第一个名称是目录名,抽象路径名中第一个名称之后每个名称都是表示一个目录,最后一个名称即可以表示目录也可以表示文件]  用户界面和操作系统使用与系统相关的 路径名字符串 来命名文件和目录.此类呈现分层路径名的一个抽象的.与系统无关的视图. 抽象路径名 有两部分组成: 1)一个可选的与系统相关的前缀字符串,比如盘符:"

Java的IO流各个类的使用原则

参考:http://blog.csdn.net/ilibaba/article/details/3955799 Java IO 的一般使用原则(花多眼乱,其实每个类都有专门的作用): 这里有详细介绍:Java的IO输入输出流类的介绍(有图) 一.按数据来源(去向,也就是颗粒)分类: 1 .文件: FileInputStream, FileOutputStream, (字节流) FileReader, FileWriter(字符流) 2 .字节数组 byte[]: ByteArrayInputSt

Java之IO流---字节流

1.1 IO流的引入 IO流在很多语言已有体现,诸如C语言的stdio.h,C++中的iostream.Java中的IO流大抵是用于在控制台.磁盘.内存上进行数据的读写操作,完成数据的传递. 我们可以对它进行如下分类: 按处理的数据类型可分为字节流与字符流 按流的流向可分为输入流(in)与输出流(out) 按流的功能可分为节点流(Node)和过滤流(Filter) 本篇侧重于梳理字节流相关的知识,毕竟作为字符流的前辈,它还是非常重要的.下篇继续梳理字符流. 1.2 IO流的继承体系图 大概描述了

JAVA的IO学习

IO 有具体的分类: 有具体的分类:1:根据处理的数类型不同:字节流和字符流.2:根据流向不同:输入流和输出流. =============(补充字节跟字符概念区分)============================== 字符:可使用多种不同字符方案或代码页来表示的抽象实体.例如,Unicode UTF-16 编码将字符表示为 16 位整数序列,而Unicode UTF-8 编码则将相同的字符表示为 8 位字节序列.公共语言运行库使用 Unicode UTF-16(Unicode 转换格式

Java之IO(八)PipedIutputStream和PipedOutputStream

转载请注明源出处:http://www.cnblogs.com/lighten/p/7056278.html 1.前言 本章介绍Java的IO体系中最后一对字节流--管道流.之前在字节数组流的时候就说过,其可以充当输入输出流的转换作用,Java中还有一个管道流可以完成相似的功能,但是其主要作用是用于不同线程间的通讯,下面就具体讲一下管道流是如何实现的,以及相关例子. 值得注意的是,在JDK源码注释中提到了,通常使用一个管道输出流关联一个管道输入流形成管道会话.通常输入流和输出流是不在一个线程中的

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正

java的IO总结(一)

Java的IO流是实现输入输出的基础,这里所说的流就是数据流,大部分的与流相关的类放在Java.io包下. 一,Java的流分类 按照不同的分类方式可以把流分成不同的类型,下面我们从不同的角度对流进行分类. 1,按照流的方向可以分为输入流与输出流       输入流:只能从中读取数据,而不能向其写出数据       输出流:只能向其写出数据,而不能从中读数据.     2,字节流与字符流 字节流主要是以InputStream和OutputStream为基类,其对应子类有FileInputStre

java中IO写文件工具类

下面是一些根据常用java类进行组装的对文件进行操作的类,平时,我更喜欢使用Jodd.io中提供的一些对文件的操作类,里面的方法写的简单易懂. 其中jodd中提供的JavaUtil类中提供的方法足够我们使用,里面的方法写的非常简练,例如append,read等方法,封装更好,更符合面向对象, 这里面我写的一些方法可多都是模仿jodd,从里面进行抽取出来的. /** * 获取路径文件夹下的所有文件 * @param path * @return */ public static File[] ge

Java操作IO各主要类介绍

DataInputStream和DataOutputStream 往二进制文件中读和写入java基本数据类型 public class BinaryReadWrite { private DataInputStream dis = null; private DataOutputStream dos = null; private String s_FilePath = "config\\bin.dat"; private byte[] buff = "{\"nam

JAVA之IO技术File类的使用

package ioTest.io3; /* * File类是对文件和文件夹的抽象. * File类的常见方法: * 1.创建 * createNewFile():在指定的位置创建文件,如果该文件已经存在,则不创建,返回false. * 和输出流对象不一样,输出流对象,只要已建立就创建,如果文件存在,则覆盖. * mkdir():创建此抽象路径名指定的目录 * mkdir():创建此抽象路径名指定的目录,包括所有必需但不存在的父目录. * 2.删除 * delete() * deleteOnEx