开发者社区> dsn727455218> 正文

JAVA读取文件的几种方法

简介: 喜欢的朋友可以关注下,粉丝也缺。 InputStreamReader+BufferedReader读取字符串 InputStreamReader 将字节流转换为字符流。
+关注继续查看

喜欢的朋友可以关注下,粉丝也缺。


InputStreamReader+BufferedReader读取字符串

InputStreamReader 将字节流转换为字符流。是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。 

构造方法 : 
    InputStreamReader isr = new InputStreamReader(InputStream in);//构造一个默认编码集的InputStreamReader类 
    InputStreamReader isr = new InputStreamReader(InputStream in,String charsetName);//构造一个指定编码集的InputStreamReader类。 
    
    参数 in对象通过 InputStream in = System.in;获得。//读取键盘上的数据。 
    或者 InputStream in = new FileInputStream(String fileName);//读取文件中的数据。可以看出 FileInputStream 为InputStream的子类。 
主要方法 :int read();//读取单个字符。 
                 int read(char []cbuf);//将读取到的字符存到数组中。返回读取的字符数。

private static String readString()
    {
        int len=0;
        StringBuffer str=new StringBuffer("");
        File file=new File(FILE_IN);
        try {
            FileInputStream is=new FileInputStream(file);
            InputStreamReader isr= new InputStreamReader(is);
            BufferedReader in= new BufferedReader(isr);
            String line=null;
            while( (line=in.readLine())!=null )
            {
                if(len != 0)  // 处理换行符的问题
                {
                    str.append("\r\n"+line);
                }
                else
                {
                    str.append(line);
                }
                len++;
            }
            in.close();
            is.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
 }
        return str.toString();
    }


 FileReader 读取

FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。

其中File对象可以是来自用户在一个<input>元素上选择文件后返回的FileList对象,也可以来自拖放操作生成的 DataTransfer对象,还可以是来自在一个HTMLCanvasElement上执行mozGetAsFile()方法后返回结果.

private static String readString()
    {
        StringBuffer str=new StringBuffer("");
        File file=new File(FILE_IN);
        try {
            FileReader fr=new FileReader(file);
            int ch = 0;
            while((ch = fr.read())!=-1 )
            {
                System.out.print((char)ch+" "); 
            }
            fr.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("File reader出错");
        }
        return str.toString();
    }




以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。

 当然也是可以读字符串的。

   
 /* 貌似是说网络环境中比较复杂,每次传过来的字符是定长的,用这种方式?*/
    public String readString1()
    {
        try
        {
            //FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。 
            FileInputStream inStream=this.openFileInput(FILE_NAME);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] buffer=new byte[1024];
            int length=-1;
            while( (length = inStream.read(buffer) != -1)
            {
                bos.write(buffer,0,length);
                // .write方法 SDK 的解释是 Writes count bytes from the byte array buffer starting at offset index to this stream.
                //  当流关闭以后内容依然存在
            }
            bos.close();
            inStream.close();
            return bos.toString();   
            // 为什么不一次性把buffer得大小取出来呢?为什么还要写入到bos中呢? return new(buffer,"UTF-8") 不更好么?
            // return new String(bos.toByteArray(),"UTF-8");       
        }
    }



按字节读取字符串
private static String readString3()
{
    String str="";
    File file=new File(FILE_IN);
    try {
        FileInputStream in=new FileInputStream(file);
        // size  为字串的长度 ,这里一次性读完
        int size=in.available();
        byte[] buffer=new byte[size];
        in.read(buffer);
        in.close();
        str=new String(buffer,"GB2312");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        return null;
        e.printStackTrace();
    }
    return str;
}



如遇到问题欢迎进群308742428

喜欢的朋友可以关注下,粉丝也缺。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java-用简单方法创建透明窗口
Java-用简单方法创建透明窗口
128 0
Java String 的 常量池 和 intern 方法 简析
Java String 的 常量池 和 intern 方法 简析字符串常量池和 intern 方法 先举个例子,我们创建 10000 个相同的 String,并且不使用常量池 String[] list = new String[10000]; for (int i = 0; i < 10000; i++) { list[i] = new String(new char[]{'a','b','c'}); } 结果是:每个 String 都用新开的对象,占用大量内存 现在我们这样创建,增加一个 map ,key 和 value 内容一样,每次取的时候,先检查一下 map 里面有没
77 0
对Java程序main方法的一些思考
本文浅谈对Java程序main方法的一些思考
53 0
Java形参个数可变的方法
本文介绍Java支持的形参个数可变的方法。
40 0
Java的学习笔记(04)方法
Java方法01 方法是语句的集合,执行一个功能。方法再程序中被创建,再其他地方被引用 一个方法只做一个功能 方法的命名规则:首字母小写,驼峰规则。 package method; public class Demo01 { //mian 方法 public static void main(String[] args) { int sum = add(1,2); //调用一个方法:加法 // 实际参数:实际调用传递给
29 0
【Java编程进阶】方法初识
方法是组合在一起来执行操作语句的集合`,将具有独立功能的代码块组织成为一个整体,使其具有特殊功能,并且能实现达到代码复用的效果。例如我们要在程序中多次判断一个数字是奇数还是偶数,这时,我们就可以将判断一个数的奇偶性的代码段封装成一个方法,后面再使用时只需要调用这个方法,大大提高了编程的效率和代码的复用性。
51 0
算法java快速排序的两种方法(单边循环、双边循环)
算法java快速排序的两种方法(单边循环、双边循环)
37 0
java二分查找方法的实现和其优化(解决整数溢出)
java二分查找方法的实现和其优化(解决整数溢出)
69 0
Java练习题——抽象类、方法以及接口
由于三种动物都有共同属性:名字和属性,并且有共同行为:吃,所以只需要在共同父类(Animal)中编写标准Javabean类即可
96 0
Java练习题——方法(基础版)
求数组内最大值以及定义一个随机数组在之前已经介绍过了,只需要将这部分的代码打包放在一个方法内,并在main方法中调用即可
153 0
+关注
dsn727455218
一个奋斗的程序猿
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
JAVA开发手册1.5.0
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多