首页 > 编程语言 >图文详解Java中的字节输入与输出流

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

时间:2023-02-08 18:36:51浏览次数:39  
标签:file java 读取 io catch 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();
			}
		}
	}

   }
}

标签:file,java,读取,io,catch,Java,图文,字节
From: https://www.cnblogs.com/dituirenwu/p/17102906.html

相关文章

  • 创建keycloak用户、角色、用户角色映射关系(Java API + Rest API实现)
    @Slf4j@ServicepublicclassKeyCloakService{privateRestTemplaterestTemplate;privateKeycloakAdminClientkeycloakAdminClient;/***kc新......
  • 逗号(,)运算符在Javascript中
    逗号运算符逗号运算符是二元运算符,它能够先执行运算符左侧的操作数,然后再执行右侧的操作数,最后返回右侧操作数的值。逗号表达式:一般形式:表达式1,表达式2,......
  • java8排序stream().sorted()
    默认升序 先以年龄升序排序年龄相同是按分数降序List<Student>list=userList.stream().sorted(Comparator.comparing(Student::getAge).thenComparing(Student::g......
  • 完整工作流整合方案,自定义配置,Java+Vue+Activiti@附配套文档
    前言activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,一套完整并且实际运用在多套项目中的案例,满足日常业务流程审批需求。一、项目形式springboot......
  • JAVA WEB项目大文件上传下载解决方案
    ​ 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数下面直接贴代码吧,一些难懂的我大部分都加上......
  • javaScript进阶
    javaScript进阶一、作用域JS的作用域简单来说就是变量(变量作用于又称上下文)和函数生效(能被访问)的区域1.全局作用域函数之外声明的变量,会成为全局变量。变量在程序的任......
  • Java中使用MapStruct时使用@Mapping的expression表达式实现自定义转换规则(多对一、获
    场景Java中使用MapStruct实现对象转换/实体属性赋值/Bean属性映射,避免大量setter和getter:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/128922752上面......
  • Swagger使用注意事项-java
    使用swagger后,所有controller中的方法都会自动生成接口;但是并不完美,需要配合swagger的注解来进行接口说明的完善(在代码中添加了注释,方便阅读)。可以导入到Yapi中,免去手动创......
  • Java中的JDBC基本概念和各对象详解
    概念JavaDataBaseConnectivity Java数据库连接,Java语言操作数据库JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这......
  • JAVA WEB项目大文件上传下载源代码
    ​ 1、介绍enctypeenctype 属性规定发送到服务器之前应该如何对表单数据进行编码。enctype作用是告知服务器请求正文的MIME类型(请求消息头content-type的作用一样)1、......