欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

图文详解Java中的字节输入与输出流,

来源: javaer 分享于  点击 19452 次 点评:234

图文详解Java中的字节输入与输出流,


目录
  • 字节输入流
    • 字节输入流结构图
    • FileInputStream类
    • 构造方法:
    • 常用读取方法:
  • 字节输出流
    • 字节输出流结构图:
    • FileOutputStream类
    • 构造方法:
    • 常用写入方法:
  • 总结

    字节输入流

    java.io.InputStream抽象类是所有字节输入流的超类,将数据从文件中读取出来。

    字节输入流结构图

    在Java中针对文件的读写操作有一些流,其中介绍最常见的字节输入流。

    FileInputStream类

    FileInputStream流被称为字节输入流,对文件以字节的形式读取操作,例如文字,图片等。

    构造方法:

    • FileInputStream(File file) ;通过File文件对象创建
    • FileInputStream(String name) ;通过一个文件路径字符串创建

    常用读取方法:

    read() 方法,从文件的第一个字节开始读取,每执行一次就读取一个字节,如果文件为空,则读取返回-1,挨个字节读取对于中文字符会出现乱码。

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    public class dome2{
    	public static void main(String[] args){
    	  File file=new File("D:/.../...txt");   //创建file对象
    	  FileInputStream fi=null;
    	 try {
    		 fi=new FileInputStream(file);   //创建字节输入流
    		 
    		 int read;   
    		 
    		 while((read=fi.read())!=-1) {   //数据不为空的情况下循环读取
    			 System.out.print((char)read);   //将读取的数据打印
    		 }
    	} catch (FileNotFoundException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	} catch (IOException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}finally {
    		if(fi!=null) {
    			try {
    				fi.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    	}
    	 
       }
    }
    

    read(byte[] b) ,从此输入流中读取b.length个字节的数据读入到byte数组中,针对中文字符读取产生乱码,需要编码,如果记事本存储的汉字是什么格式的就在读取的时候改成什么格式,例如我现在记事本的编码格式是ANSI,在读取的时候就是按照ANSI或者gbk编码格式读取。

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    public class dome2{
    	public static void main(String[] args){
    	  File file=new File("D:/../...txt");   //创建file对象
    	  FileInputStream fi=null;
    	 try {
    		 fi=new FileInputStream(file);   //创建字节输入流
    		 
    		 int read;   
    		 byte[] bytes=new byte[1024];  //创建一个数组,讲读取的字节存入数组
    		 while((read=fi.read(bytes))!=-1) {   //数据不为空的情况下循环读取
    			 System.out.print(new String(bytes,0,read,"gbk"));   //将读取的数据按字符串打印
    		 }
    	} catch (FileNotFoundException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	} catch (IOException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}finally {
    		if(fi!=null) {
    			try {
    				fi.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    	}
    	 
       }
    }
    
    方法名 说明
    void close() 关闭此文件输入流并释放关于此流有关的所有系统资源
    int read(byte[] b, int off, int len) 从此输入流中将len个字节的数据读入到byte数组中
    int available() 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。
    long skip(long n) 从输入流中跳过并丢弃 n 个字节的数据。

    字节输出流

    java.io.OutputStream抽象类是所有字节输出流的超类,该类用于对文件写入数据。

    字节输出流结构图:

    FileOutputStream类

    FileOutputStream类是向文件中以字节的形式写入数据,例如图像和图片等。

    构造方法:

    1. FileOutputStream(File file);通过一个file对象表示的文件创建一个字节输出流。
    2. FileOutputStream(File file, boolean append);通过一个file对象表示的文件创建一个字节输出流,append表示追加,true代表往后追加,false则要全部覆盖,文件里只存留刚写入的数据。
    3. FileOutputStream(String name);通过一个指定路径名字符串创建一个字节输出流对象。
    4. FileOutputStream(String name, boolean append);通过一个指定路径字符串创建一个字节输出流对象,append同上。

    常用写入方法:

    1. write(byte[] b); 将b.length个字节从指定的byte数组中写入到此输出流中。
    2. write(byte[] b, int off, int len); 将指定的byte数组从偏移量off开始到len个字节写入到此输出流中。
    3. write(int b); 将指定字节写入到此输出流中。
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    
    public class dome2{
    	public static void main(String[] args){
    	  File file=new File("D:/hello.txt");   //创建file对象
    	  FileOutputStream fo=null;
    	  
    	  try {
    		fo=new FileOutputStream(file);
    		String str="你好,java!";
    		byte[] bytes=str.getBytes();
    		fo.write(bytes);
    	} catch (FileNotFoundException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	} catch (IOException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}finally {
    		if(fo!=null) {
    			try {
    				fo.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    	}
    
       }
    }
    

    总结

    到此这篇关于Java中字节输入与输出流的文章就介绍到这了,更多相关Java字节输入与输出流内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

    您可能感兴趣的文章:
    • java文件输出流写文件的几种方法
    • Java输入输出流的使用详细介绍
    • 浅谈JAVA中输入输出流实例详解
    • java实现输入输出流代码分享
    • java 对象输入输出流读写文件的操作实例
    • Java和C#输入输出流的方法(详解)
    • Java输入输出流实例详解
    相关栏目:

    用户点评