java按字节、字符、行、随机读取文件,并设置字符编码格式

java按字节、字符、行、随机读取文件,并设置字符编码格式

首先介绍可能用到的java类:

inputStream:是字节输入流的所有类的超类,是一个抽象类;返回0-225内的字节值,如果没有字节可以读取则返回-1;

FileInputStream:读取文件中的字节,转成字节流,字节流读取不存在编码问题

FileReader:读取文件中的字符,转成字符流,字符读取需要注意编码问题

BufferedInputStream:字节读取,减少磁盘开销,不带缓存没读取一个字节就要写入一个字节,而带缓存则放在缓冲区(内存)等到设置的缓冲区限度时再写入。

BufferedReader:字符读取,减少磁盘开销,可以使用readline()方法整行读取。

inputStreamReader:可以将读如stream转换成字符流方式,是reader和stream之间的桥梁,并可以设置字符编码

package com.liuxin.test;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import javassist.expr.NewArray;

public class Read {

	public static void main(String[] args) throws Exception {
		String fileName="D://1.txt";//读取文件
		System.out.println("----------字节读取文件前1024个字节内容的方法-------------");
		readFileByBytes(fileName);//读取文件前1024个字节内容的方法
		System.out.println("----------字节读取文件中所有字节的方法-------------");
		readFileAllByBytes(fileName);//读取文件中所有字节的方法
		System.out.println("----------字节以每次读取512个字节,循环读取文件内容-------------");
		readFileRoundBy512(fileName);//以每次读取512个字节,循环读取文件内容
		System.out.println("----------字节创建缓冲流读取读取文件内容-------------");
		readFileBufferByte(fileName);
		System.out.println("----------读取文件前1024个字符内容的方法-------------");
		readFileByChar(fileName);
		System.out.println("----------字符读取文件中所有内容的方法-------------");
		readFileAllByChar(fileName);
		System.out.println("----------字符创建缓冲流整行读取文件内容-------------");
		readFileBufferChar(fileName);
		System.out.println("----------字符创建缓冲流整行读取文件内容,并设置字符编码-------------");
		readFileSetEncode(fileName);
		
	}


	private static void readFileSetEncode(String fileName)throws Exception {
		//2017年9月30日 下午12:46:05
		InputStream is=new FileInputStream(fileName);
		InputStreamReader isr=new InputStreamReader(is,"gbk");
		BufferedReader br=new BufferedReader(isr);
		String tempLine=null;
		while((tempLine=br.readLine())!=null){
			System.out.println(tempLine);
		}
		br.close();
		isr.close();
		is.close();
	}


	private static void readFileBufferChar(String fileName)throws Exception {
		//2017年9月30日 上午11:55:11
		BufferedReader br=new BufferedReader(new FileReader(fileName));
		String tempLine=null;
		while((tempLine=br.readLine())!=null){
			System.out.println(tempLine);
		}
		br.close();
	}


	private static void readFileAllByChar(String fileName) throws Exception{
		//2017年9月30日 上午11:41:44
		FileReader fr=new FileReader(fileName);
		int tempChar=-1;
		while((tempChar=fr.read())!=-1){//循环读取,每次循环读取一个字,每个汉字都有对应的char数字对应,因此需要将汉字对应的数字强转成char。
			System.out.print((char)tempChar);
		}
		fr.close();
	}


	private static void readFileByChar(String fileName)throws Exception {
		//2017年9月30日 上午11:29:56
		FileReader fr=new FileReader(fileName);
		char[] buf=new char[1024];
		int tempChar=fr.read(buf);
		if(tempChar!=-1){
			System.out.println(new String(buf,0,tempChar));
		}
		fr.close();
	}


	private static void readFileBufferByte(String fileName) throws Exception{
		//2017年9月30日 上午10:49:45
		File file=new File(fileName);
		BufferedInputStream bis=null;//buffered是创建缓冲区,减少磁盘开销,不带缓存没读取一个字节就要写入一个字节,而带缓存则放在缓冲区(内存)等到设置的缓冲区限度时再写入。
		bis=new BufferedInputStream(new FileInputStream(file),512);
		byte[] buf=new byte[bis.available()];
		int tempByte=-1;
		while((tempByte=bis.read(buf))!=-1){
			System.out.println(new String(buf,0,tempByte));
		}
		bis.close();
	}


	private static void readFileRoundBy512(String fileName) throws Exception {
		//2017年9月30日 上午10:10:57
		FileInputStream fis =new FileInputStream(fileName);
		byte[] buf=new byte[512];
		int tempByte=-1;
		while((tempByte=fis.read(buf))!=-1){
			System.out.print(new String(buf,0,tempByte));  //不能使用println,否则会出现错行的现象
		}
		fis.close();
	}


	private static void readFileAllByBytes(String fileName) throws Exception {
		FileInputStream fis=new FileInputStream(fileName);
		byte[] buf =new byte[fis.available()];//fis.available()方法是读取文件中的所有内容的字节长度
		int tempByte=fis.read(buf);
		if(tempByte != -1){
			System.out.println(new String(buf,0,tempByte));
		}
		fis.available();
	}

	private static void readFileByBytes(String fileName) throws Exception {
		FileInputStream fis=new FileInputStream(fileName);
	 	byte[] buf=new byte[1024];
	 	int tempByte=fis.read(buf);
	 	if(tempByte !=-1 ){
	 		System.out.println(new String(buf,0,tempByte));
	 	}
	 	fis.close();
	}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106299.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • zuul网关集成swagger

    zuul网关集成swaggerswagger2是一个API文档生成工具,在微服务的架构中,一般会使用zuul作为api网关,适合用来集成swagger生成所有微服务的接口文档。(springboot版本1.5.9)zuul服务添加依赖springfox-swagger2是用于生成接口文档的,必须要依赖springfox-swagger-ui负责提供ui查询界面,这里因为是在zuul集成,所以只需要z…

    2022年8月15日
    3
  • SpringMVC工作原理概述

    SpringMVC工作原理概述SpringMVC框架介绍SpringMVC属于SpringFrameWork的后续产品,已经融合在SpringWebFlow里面。Spring框架提供了构建Web应用程序的全功能MVC模块。使用Spring可插入的MVC架构,可以选择是使用内置的SpringWeb框架还是Struts这样的Web框架。通过策略接口,Spring框架是高度可配置的,而…

    2022年5月15日
    44
  • SLAM机器人开发(二)SLAM技术现状

    SLAM机器人开发(二)SLAM技术现状SLAM机器人开发(二)SLAM技术现状激光SLAM2D激光SLAM3D激光SLAM视觉SLAM常见的视觉SLAM视觉SLAM对比视觉SLAM中使用的相机种类视觉SLAM效果图视觉激光融合SLAM激光SLAM2D激光SLAM激光SLAM在SLAM技术中是较为传统且成熟的。2D激光SLAM技术需要输入IMU数据、里程计数据和2D激光雷达数据,经过计算后输出覆盖栅格地图和机器人轨迹。从20世纪90年代EKF-SLAM的提出开始,陆续出现了UKF-SLAM、PF-S

    2022年10月1日
    3
  • 数据解读 | 川菜出圈只靠辣?你太小瞧川菜了[通俗易懂]

    数据解读 | 川菜出圈只靠辣?你太小瞧川菜了[通俗易懂]图片来自网络,侵删作者|钟黛编辑|陆泓设计|张梓豪来源|DT财经(ID:DTcaijing)聚餐不知道吃什么,结局通常是二选一…

    2022年5月24日
    32
  • Unity 基于eventTriggers的3D场景交互系统「建议收藏」

    Unity 基于eventTriggers的3D场景交互系统「建议收藏」Unity基于eventTriggers的3D场景交互系统  Unity里的3D项目有时候需要大量的交互,而且是无UI的交互。这时候可以像UI系统里,使用eventTrigger去制作交互系统。但是这个缺少自定义功能,所以我写了个自定义交互系统。这个交互系统可以做到什么呢?直接上图(仅为演示DEMO)。点击触发事件移动并且事件复杂的交互  该系统采用的工厂设计模式,将你需要的功能写入EventTriggersDemo,将你的功能码

    2022年6月1日
    198
  • Druid 介绍及配置「建议收藏」

    Druid 介绍及配置「建议收藏」 转自阿里Druid官方,欢迎大家使用Druid,常见问题在这里解答,希望对大家有所帮助。1.Druid是什么?Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。2.在哪里下载druid正式版本下载: maven中央仓库: http://central.maven.org/maven2/com/alibaba/druid/ 3.怎么获…

    2022年7月23日
    13

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号