黑马程序员-----------io流

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、概论
    在java中,对于数据的输出输入控制称值为流。大部分流都在java.io包中,位于java.io包内的类都分别继承自四种抽象流类型
    字节输入流InputStream、字节输出流OutputStream、字符输入流Reader、字节输出流Writer。
流的分类
  按流向分:
    输入流: 程序可以从中读取数据的流,都拥有基本方法read()。
    输出流: 程序能向其中写入数据的流,都拥有基本方法write()。
  按数据传输单位分:
    字节流: 以字节为单位传输数据的流,字节流处理的单元为一个字节。
    字符流: 以字符为单位传输数据的流,字符流一次可以处理两个单元。
  大部分流都是以成对出现。
二、File类
  File代表文件和目录路径名的抽象表示形式,它的实例对象创建后不能修改,新new出来的File对象,可能在硬盘上并不存在。
  File的常用方法

	import java.io.*;
	class FileDemo{
		public static void main(String[] args) {  
			File f = new File("d:\\java\\io.txt");
		if(f.exists() ){
			if( f.isFile() ){
				System.out.println( "这是一个文件");
				Long l = f.length();
				System.out.println( "文件长度" + l);
			}
			else if ( f.isDirectory()){
				System.out.println( "这是一个文件夹");
			}
		}
		else{
			f.createNewFile() ;
			System.out.println( "创建一个文件"+f.toString());
		}
			f.delete();
			System.out.println( "删除一个文件"+f.toString());
		}
	}	

三、流的一些使用
  字符流主要是用来处理字符的。Java采用16位的Unicode来表示字符。字符流类有两个基类Reader和Writer,继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符。继承自Writer的流都是用于输出单位为字符的数据。
  使用字符流来复制一个txt文件

import java.io.*;
	class Demo{
		public static void main (String []args) throws Exception{
				File f = new File("d:\\java\\num.txt"); 
				
				if(f.exists() &&f.toString().endsWith(".txt")&&f.isFile() ){
					BufferedReader br = new BufferedReader (new FileReader(f));
					BufferedWriter bw = new BufferedWriter (new FileWriter("d:\\a.txt"));
					String line = null ;
					while( (line = br.readLine())!=null ){
						bw.write(line);
						bw.flush();                
					}
					
					System.out.println("复制完成!");
					br.close();
					bw.close();
				}
				else
					System.out.println("输入的文件名错误!");
	}

   字节流相对于字符流,还可以对音频等其他文件进行处理

	class Demo{
	public static void main (String []args) throws Exception{
		
			File f = new File("d:\\java\\num.txt"); 
			
			if(f.exists() &&f.isFile() ){
				InputStream in = new FileInputStream(f);
				OutputStream out = new FileOutputStream("d:\\a.mp3");
				byte[] buf = new byte[1024*1024];
				int len = 0;
				while( (len = in.read(buf))!=-1 ){
					out.write(buf,0,len);
               
				}

				System.out.println("复制完成!");
				in.close();
				out.close();
			}
			else
				System.out.println("输入的文件名错误!");
	}

转换流,转换流可以将字节流转换成字符流。何时使用转换流呢。如:
    1.如果使用非默认编码保存文件或者读取文件时,需要用到转换流,因为字节流的重载构造方法中有指定编码格式的参数,而FielReader 与 FileWriter 是默认编码的文本文件
    2.流是字节流,但里面都是字符,转换成字符流可以使用bufferedReader、bufferedWriter独有方法。
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in) );
合并流, 合并流SequenceInputStream 表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
 

	Vector v = new Vector();
	v.add(new FileInputStream ("f:\\1.txt"));
	v.add(new FileInputStream ("f:\\2.txt"));
	v.add(new FileInputStream ("f:\\3.txt"));
	v.add(new FileInputStream ("f:\\4.txt"));
	Enumeration en = v.elements();
	SequenceInputStream sis = new SequenceInputStream(en);
	FileOutputStream d = new FileOutputStream ("f:\\测试.txt")		
	

 Print流:
    Print流:Pirnt流为打印流,用作输出,有PrintWrite与PrintStresm。System.out就是PrintStream的一个实例。Print流中的方法不会抛出 I/O 异常.
    

	class Demo{
		public static void main (String []args) throws Exception{
			FielOutputStream fo = new FielOutputStream("f:\\1.txt"); 
			PrintStream ps = new PrintStream(fo );
	    for(int x = 0; x <= 100; c++){    
	        ps.print(x);
	    ps.close();
		}
	}



Print流:
    Print流:Pirnt流为打印流,用作输出,有PrintWrite与PrintStresm。System.out就是PrintStream的一个实例。Print流中的方法不会抛出 I/O 异常.
    




 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值