java 类例子_java i/o各种封装类及例子

还是我来跟你说吧。

Java中最基本的是字节流,如FileInputStream/FileOutputStream;

然后是带缓冲的字节流:BufferedInputStream/BufferedOutputStream,此流的作用就是提高基本字节流的效率;

再有就是过滤流,如:DataInputStream/DataOutputStream。这些流的作用就是,我们可以直接读取/写入Java基本数据类型,如直接写入int char boolean float double short byte 等。

然而有时候我们处理的只是文本文件,有不想没错都自己写代码把字节转换成字符怎么办?

这时候字符流就出现了!

Java中最基本的字符流就是Reader类,但它是抽象类,

我们可以使用InputStreamReader/OutputStreamReader类来把字节流封装成字符流,

当然也可以直接使用FIleReader类获得字符流,

接着我们可以继续封装字符流来获得一些特殊的功能。

如可以封装BufferedReader/BufferedWriter来获得更高的读取/写出效率的字符流

其中BufferedReader来由按行读取文件的功能。

这些就是一些比较常用的流。

下面举个例子:

比方说我要读取一个文本文件,那么我可先构造一个字节流:

FileInputStream fis = new FileInputStream(new FIle("F://SomeFile"));

然后我想按字符读取这个文件,我可以把它封装成字符流:

InputStreamReader ir = new InputStreamReader(fis);

最后我想提高效率和获得按行读取的功能,可以继续封装:

BufferedReader br = new BufferedReader(ir);

OK,到这里我就完成了封装,可以使用这个br来读取文件了。

呵呵,写得有点多,希望你能看明白。

Q:3q,能说说具体的场地用发么?比如,我在网络对话中该使用哪种流?读取文本文件用什么输入流?读取其他文件(如MP3) 又该用什么流?或者说说,常用什么类流读取/写入文件~~

是有点笨~`

A1:

你首先要搞明白你去读文件需要的是什么!

文本文件需要的是文字,当然就是字符流了。

网络对话,最基层是发送字节数据,所以基层还是字节流。

但是如HTTP/FTP等协议是基于字符的,可以再封装一层字符流。

读取二进制文件(文本文件之外的文件)就用字节流好了。

一般网上都有现成的包来把字节流转化成你需要的资源,如读取图片、音乐、视频等,都是使用第三方类库从字节流中读取的。

A2:

贴一个最近写的java文件中注释清理的代码,希望对你帮助。

最近一个项目需要清理java源文件中的注释,故用java 的读写流简单实现了清理功能,一些代码的特殊替换也可用这个算法实现。

在main函数中调用processClear(file) 函数进行处理,file对象为一个源文件目录的File类型的实例,因清理时会加上临时扩展名_temp, 故再调用processReName(file)将文件名更新,算法有点重复,因临时要急用,所以偷懒了。改天再重构,下面是源码:

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class ClsRemark {

/**

* @param args

*/ public static void main(String[] args) {

try {

File file = new File("H://src");

System.out.print(" Start>>> ...");

processClear(file);           // Clear

processReName(file); // ReName

System.out.print(" End>>> ...");

} catch (IOException e) {

e.printStackTrace();

}

}

/**

*

* @param file

* @throws IOException

*/

public static void processClear(File file) throws IOException {

File[] files = getFiles(file);

if (files != null && files.length > 0) {

for (int i = 0; i < files.length; i++) {

if (files[i].isDirectory()) {

processClear(files[i]);

} else {

clear(files[i]);

}

}

}

}

/**

*

* @param file

* @throws IOException

*/ public static void processReName(File file) throws IOException {

File[] files = getFiles(file);

if (files != null && files.length > 0) {

for (int i = 0; i < files.length; i++) {

if (files[i].isDirectory()) {

reName(files[i]);

} else {

reName(files[i]);

}

}

}

}

/**

*

* @param file

* @return

*/ public static File[] getFiles(File file) {

return file.listFiles();

}

/**

*

* @param file

* @throws IOException

*/

public static void clear(File file) throws IOException {

if (file.getName().substring(file.getName().length() - 5, file.getName().length()).equalsIgnoreCase(".java")) {

FileReader fr = new FileReader(file);

BufferedReader br = new BufferedReader(fr);

FileWriter fw = new FileWriter(file.getPath() + "_temp"); // 临时在扩展名后加上_temp

BufferedWriter bw = new BufferedWriter(fw);

String strLine;

strLine = br.readLine();

while (strLine != null) {

if (strLine != null && strLine.trim().length() > 0) {

if (strLine.trim().charAt(0) == '/' || strLine.trim().charAt(0) == '*') {

strLine = "";

} else if (strLine.indexOf("//") > 0) {

strLine = strLine.substring(0, strLine.indexOf("//"));

} else if (strLine.indexOf("/*") > 0) {

strLine = strLine.substring(0, strLine.indexOf("/*"));

}

}

bw.write(strLine);

bw.newLine();

strLine = br.readLine();

}

bw.close();

fw.close();

br.close();

fr.close();

file.delete();

}

}

/**

*

* @param file

* @throws IOException

*/

public static void reName(File file) throws IOException {

if (file.getName().substring(file.getName().length() - 10, file.getName().length()).equalsIgnoreCase(".java_temp")) {

FileReader fr = new FileReader(file);

BufferedReader br = new BufferedReader(fr);

FileWriter fw = new FileWriter(file.getPath().substring(0, file.getPath().length() - 10));                   // 截取掉扩展名后_temp

BufferedWriter bw = new BufferedWriter(fw);

String strLine;

strLine = br.readLine();

while (strLine != null) {

bw.write(strLine);

bw.newLine();

strLine = br.readLine();

}

bw.close();

fw.close();

br.close();

fr.close();

file.delete();  } }}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值