欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java IO流总结

程序员文章站 2022-03-22 10:12:49
...

本篇主要对Java基础中BIO文件输入输出流做一个总结。

首先来看一下IO流的分类,图片来自网络:

Java IO流总结
            
    
    博客分类: Java IO和NIO javaio 

直接上代码吧:

 

1.字节输入流FileInputStream,字节输出流FileOutputStream

/**
 * FileInputStream 读取原始字节流
 **/
public class TestFileInputStream{
	public static void main(String []args){
		FileInputStream fis = null;
		try{
			fis = new FileInputStream("d:\\java\\io\\TestFileInputStream.java");//"d:/java/io/TestFileInputStream.java"
			//read()
			int num=0;
			int b;
			while((b=fis.read())!=-1){
					System.out.print((char)b);
					num++;
				}
			System.out.println("共有字节数:"+num);
			//read(byte []b)
			/*byte []buffer = new byte[1024];
			int n;
			int num=0;
			int count=0;
			while((n=fis.read(buffer))!=-1){
				for(int i=0;i<buffer.length;i++){
						System.out.print((char)buffer[i]);
						num++;
					}
					count++;
			}
			System.out.println("共有字节数:"+num+",共读了"+count+"次");*/
			//read(byte []b,int off,int len)
			/*byte []buffer = new byte[200];
			int n=0;
			int num=0;
			int count=0;
			while((n=fis.read(buffer,0,buffer.length))!=-1){
					for(int i=0;i<buffer.length;i++){
						System.out.print((char)buffer[i]);
						num++;
					}
					count++;
				}
			System.out.println("共有字节数:"+num+",共读了"+count+"次");*/
			fis.close();
		}catch(Exception e){
			System.out.println("读取原始字节流失败!");	
		}
	}
}
/**
 * FileOutputStream 写入原始字节流
 **/
public class TestFileOutputStream{
	public static void main(String []args){
		FileInputStream fis=null;
		FileOutputStream fos=null;
		int b;
		try{
			fis = new FileInputStream("d:/java.jpg");
			fos = new FileOutputStream("e:/java.jpg");
			//read(),write()
			while((b=fis.read())!=-1){
				System.out.print((char)b);
				fos.write(b);	
			}
			//read(byte []b),write(byte []b)
			/*byte []buffer = new byte[1024];
			while((b=fis.read(buffer))!=-1){
					fos.write(buffer);
				}*/
			fos.flush();
			fos.close();
			fis.close();
			System.out.println("文件复制成功!");
		}catch(Exception e){
			System.out.println("写入原始字节流失败!");	
		}	
	}
}

 

2.字符输入流FileReader,字符输出流FileWriter

/**
 * FileReader 读取字符流
 **/
public class TestFileReader{
	public static void main(String []args){
		FileReader fr=null;
		int b=0;
		try{
			fr = new FileReader("d:/java/io/TestFileReader.java");
			while((b=fr.read())!=-1){
				System.out.print((char)b);	
			}
			fr.close();
		}catch(Exception e){
			System.out.println("读取字符流失败!"+e);	
		}	
	}
}
/**
 * FileWriter 写入字符流
 **/
public class TestFileWriter{
	public static void main(String []args){
		FileReader fr = null;
		FileWriter fw = null;
		int b=0;
		try{
			fr = new FileReader("d:/java/io/TestFileWriter.java");
			fw = new FileWriter("d:/java/io/TestFileWriter1.java");
			while((b=fr.read())!=-1){
				fw.write(b);	
			}
			fw.flush();
			fw.close();
			fr.close();
			System.out.println("文件复制成功!");
		}catch(Exception e){
			System.out.println("写入字符流失败!"+e);	
		}	
	}	
}

 

3.带缓冲Buffered的输入输出流

/**
 * 缓冲流
 * BufferedInputStream 带缓冲区地读取原始字节流
 * BufferedOutputStream 带缓冲区地写入原始字节流 
 **/
public class TestBufferedStream1{
	public static void main(String []args){
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		int c=0;
		try{
			bis = new BufferedInputStream(new FileInputStream("d:/java/io/TestBufferedStream1.java"));
			bos = new BufferedOutputStream(new FileOutputStream("d:/Test1.java"));
			System.out.println((char)bis.read());
			System.out.println((char)bis.read());
			bis.mark(100);
			for(int i=0;i<10 && (c=bis.read())!=-1;i++){
				System.out.print((char)c);	
			}
			System.out.println();	
			bis.reset();
			for(int i=0;i<10 && (c=bis.read())!=-1;i++){
				System.out.print((char)c);	
			}
			while((c=bis.read())!=-1){
				bos.write(c);	
			}
			System.out.println("文件复制成功!");	
			bos.flush();
			bos.close();
			bis.close();
		}catch(Exception e){
			System.out.println("带缓冲区地读取、写入原始字节流失败!"+e);	
		}
	}	
}
/**
 * 缓冲流
 * BufferedReader 带缓冲区地读取字符流
 * BufferedWriter 带缓冲区地写入字符流 
 **/
public class TestBufferedStream2{
	public static void main(String []args){
		BufferedReader br = null;
		BufferedWriter bw = null;
		String s=null;
		try{
			bw = new BufferedWriter(new FileWriter("d:/dbk.txt"));
			br = new BufferedReader(new FileReader("d:/dbk.txt"));
			for(int i=0;i<100;i++){
				bw.write(String.valueOf(Math.random()));	
				bw.newLine();
			}
			bw.flush();
			while((s=br.readLine())!=null){
				System.out.println(s);	
			}
			bw.close();
			br.close();
		}catch(Exception e){
			System.out.println("带缓冲区地读取、写入原始字符流失败!"+e);	
		}
	}	
}

   

4.数据流DataStream:

/**
 * 数据流
 * ByteArrayOutputStream byte数组输出流
 * ByteArrayInputStream byte数组输入流
 * DataOutputStream 数据输出流
 * DataInputStream 数据输入流
 **/
public class TestDataStream{
	public static void main(String []args){
		ByteArrayOutputStream baos = null;
		DataOutputStream dos = null;
		ByteArrayInputStream bais = null;
		DataInputStream dis = null;
		try{
			baos = new ByteArrayOutputStream();
			dos = new DataOutputStream(baos);
			dos.writeDouble(Math.random());
			dos.writeBoolean(true);
			dos.flush();
			bais = new ByteArrayInputStream(baos.toByteArray());
			System.out.println(bais.available());
			dis = new DataInputStream(bais);
			System.out.println(dis.readDouble());
			System.out.println(dis.readBoolean());
			dos.close();
			dis.close();
		}catch(Exception e){
			System.out.println("数据流失败!"+e);	
		}
	}	
}

 

5.打印流PrintStream

/*
 * 打印流
 * PrintStream 打印字节流
 **/
public class TestPrintStream1{
	public static void main(String []args){
		PrintStream ps = null;
		try{
			FileOutputStream fos = new FileOutputStream("d:/bak.dat");
			ps = new PrintStream(fos);
			if(ps != null){
				System.setOut(ps);	
			}			
			int n=0;
			for(int i=0;i<60000;i++){
				System.out.print((char)i);	
				if(n++==100){
					System.out.println();
					n=0;	
				}
			}
		}catch(Exception e){
			System.out.println("打印字节流失败!"+e);	
		}	
	}	
}
/*
 * 打印流
 * PrintWriter 打印字符流
 **/
public class TestPrintStream3{
	public static void main(String []args){
		PrintWriter pw = null;
		try{
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			pw = new PrintWriter(new FileWriter("d:/bak.log",true));
			String s = null;
			while((s=br.readLine())!=null){
				if(s.equalsIgnoreCase("exit"))break;	
				System.out.println(s.toUpperCase());
				pw.println(s);
				pw.flush();
			}
			pw.println("------------");
			pw.println("===="+new Date()+"====");
			pw.flush();
			pw.close();
			br.close();
		}catch(Exception e){
			System.out.println("打印字符流失败!"+e);	
		}
	}	
}

 

6.转换流

/**
 * 转换流
 * InputStreamReader 将InputStream转换为Reader
 * 可以读一行
 **/
public class TestTransform2{
	public static void main(String []args){
		InputStreamReader isr = null;
		try{
			isr = new InputStreamReader(System.in);
			BufferedReader br = new BufferedReader(isr);
			String s = null;
			while((s=br.readLine())!=null){
				if(s.equalsIgnoreCase("exit")){
					System.exit(1);	
				}
				System.out.println(s.toUpperCase());	
			}
			br.close();
			isr.close();
		}catch(Exception e){
			System.out.println("转换输出流失败!"+e);	
		}
	}	
}
/**
 * 转换流
 * OutputStreamWriter 将OutputStream转换为Writer
 * 可以写一个字符串
 **/
public class TestTransform1{
	public static void main(String []args){
		OutputStreamWriter osw = null;
		try{
			osw = new OutputStreamWriter(new FileOutputStream("d:/bak.txt"));
			osw.write("microsoftibmgoogle");
			System.out.println(osw.getEncoding());
			osw.close();
			osw = new OutputStreamWriter(new FileOutputStream("d:/bak.txt",true),"ISO-8859-1");
			osw.write("microsoftibmgoogle");
			System.out.println(osw.getEncoding());
			osw.close();
		}catch(Exception e){
			System.out.println("转换输出流失败!"+e);	
		}
	}	
}

 

7.Object流,Java对象序列化和反序列化,transient关键字

/*
 * Object流
 * Serializable 标记类可被系列化
 * ObjectInputStream
 * ObjectOutputSteam
 **/
public class TestObjectIo{
	public static void main(String []args){
		T t = new T();
		t.n=15;
		try{
			FileOutputStream fos = new FileOutputStream("d:/objectio.dat");
			ObjectOutputStream oos = new ObjectOutputStream(fos);
			oos.writeObject(t);
			oos.flush();
			oos.close();
			FileInputStream fis = new FileInputStream("d:/objectio.dat");
			ObjectInputStream ois = new ObjectInputStream(fis);
			T oist = (T)ois.readObject();
			System.out.println(oist.i+" "+oist.j+" "+oist.k+" "+oist.n);
			ois.close();
		}catch(Exception e){
			System.out.println("Object流失败!"+e);	
		}	
	}	
}

class T implements Serializable{
	int i=1;
	int j=10;
	double k=2.231;
	transient int n=12;//transient 透明的,在系列化时不予考滤
}

     

先总结如上,后续持续更新。。。

 

 

 

 

 

 

 

 

<audio controls="controls" style="display: none;"></audio>

  • Java IO流总结
            
    
    博客分类: Java IO和NIO javaio 
  • 大小: 208 KB
相关标签: java io