流学习总结



流是指一连串流动的字符,以先进先出的方式发送信息。

按照不同的分类方式,可以将流分为不同的类型,下面从不同的角度分类:
1.输入流和输出流:按照流的流向来分,可以分为输入流和输出流
     输入流:只能从中读取数据,而不能向其中写入数据
     输出流:只能向其中写入数据,而不能从中读取数据
     java的输入流主要由InputStream和Reader作为基类,而输出流则主要由OutputStream和Writer作为基类。
2.字节流和字符流:按照操作的数据单元来分,可以分为字节流和字符流
    字节流:字节流操作的最小数据单元为8位的字节
    字符流:字符流操作的最小数据单元是16位的字符
    java的字节流由Inputstream和Outputstream作为基类,而字符流则主要由Reader和Writer作为基类。

分类
字节输入流
字节输出流
字符输入流
字符输出流
抽象基类
InputStream
OutputStream
Reader
Writer
访问文件
FileInputStream
FileOutputStream
FileReader
FileWriter
访问字符串


StringReader
StringWriter
缓冲流
BufferedInputStream
Buffered OutputStream
BufferedReader
BufferedWriter
转换流


InputStreamReader
OutputStreamReader
特殊流 DataInputStream DataOutputStream    
对象流 ObjectInputStraam ObjectOutputStream    


代码操作例子:


1.读取文本文件
//字符读取
FileReader frr=new FileReader("d://lianxi//s1.txt");//读取指定文件
BufferedReader brr=new BufferedReader(frr);
String line=null;
while ((line=brr.readLine())!=null) {
System.out.println(line );// 按行输出

}

frr.close();
brr.close();
2.复制文本文件
FileReader fr=new FileReader("d://lianxi//s1.txt");//
BufferedReader br=new BufferedReader(fr);

FileWriter fw=new FileWriter("d://lianxi//s3.txt");//
BufferedWriter bw=new BufferedWriter(fw);

//逐行读取并写入文件
while (br.ready()) {
bw.write(br.readLine()+"\n");

}

bw.flush();
bw.close();
fw.close();
fr.close();
br.close();
3.二进制文件复制
DataInputStream dis = new DataInputStream(new FileInputStream("d://lianxi//XML符号的用途.PNG"));
DataOutputStream dos = new DataOutputStream(new FileOutputStream("d://lianxi//XML.PNG"));
//-1表示读取完
byte[]bytes=new byte[1024];
int get=-1;
while ((get=dis.read(bytes))!=-1) {
dos.write(bytes, 0, get);
}
dos.close();
dis.close();

4.创建文件
try {
//构造文件
File file =new File("d:/lianxxxi/test.txt");
//判断file是否是一个文件
if (!file.exists()) {
//得到父级目录
String parent =file.getParent();
System.out.println("父级目录:"+parent);
File directory=new File(parent);
if (!directory.exists()) {
directory.mkdirs();
}
}
//创建文件
if (!file.exists()) {
file.createNewFile();
}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

5.字节流的读取
try {
//创建文件流
FileInputStream fis=new FileInputStream("d:/lianxxxi/test.txt");

int size=fis.available();
System.out.println("可读取字节数为:"+size);
//方法二
int line;
while ((line=fis.read())!=-1) {
char a=(char) line;
System.out.println(line+" "+a);
}
//方法一
byte[]bytes=new byte[size];
fis.read(bytes);
for (byte b : bytes) {
char a=(char) b;

System.out.println(a);
}

//关闭流
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

6.以特定的编码格式读写

FileInputStream fis=new FileInputStream("d:/lianxxxi/hahacopy.txt");
InputStreamReader isr=new InputStreamReader(fis, "gbk");
int line1;
while ((line1=isr.read())!=-1) {
char a=(char) line1;
System.out.print (a);
}
fis.close();
isr.close();
//写
FileOutputStream fos=new FileOutputStream("d:/lianxxxi/hapy.txt");
OutputStreamWriter osw=new OutputStreamWriter(fos, "gbk");
String str="haha";
osw.write(str);
fos.close;
osw.flush;
osw.close;

7.复制特定后缀文件名的方法
public class Test {
public static void main(String[] args) throws Exception {
// 得到源目录
File srcDir=new File("F:/java");
if (!(srcDir.exists()&&srcDir.isDirectory())) {
throw new Exception("目录不存在!");
}else {
//得到目录下所有java文件
File [] files=srcDir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// 返回后缀名为java的文件
return name.endsWith(".java");
}
});
System.out.println(files.length);
//目标目录
File destDir=new File("F:/jad");
if (!destDir.exists()) {
destDir.mkdir();
}
for (File file : files) {
FileInputStream fis=new FileInputStream(file);
String destFileNameString=file.getName().replaceAll("\\.java$", ".jad");
FileOutputStream fos=new FileOutputStream(new File(destDir, destFileNameString));
System.out.println("更改名字后:"+destFileNameString);
copy(fis,fos);//调用方法
fis.close();
fos.close();
}
System.out.println(" 复制完毕!");
}
}
private static void copy(FileInputStream fis, FileOutputStream fos) throws IOException {
int len = 0;
byte[] buf = new byte[1024];
while ((len = fis.read(buf)) != -1) {
fos.write(buf, 0, len);
}
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值