[转Java读取文件]各种流-阿里云开发者社区

开发者社区> 自娱> 正文

[转Java读取文件]各种流

简介:
+关注继续查看
[Java]读取文件方法大全 
1、按字节读取文件内容 
2、按字符读取文件内容 
3、按行读取文件内容 

4、随机读取文件内容 
public class ReadFromFile { 
    /** 
     * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。 
     */ 
    public static void readFileByBytes(String fileName) { 
        File file = new File(fileName); 
        InputStream in = null; 
        try { 
            System.out.println("以字节为单位读取文件内容,一次读一个字节:"); 
            // 一次读一个字节 
            in = new FileInputStream(file); 
            int tempbyte; 
            while ((tempbyte = in.read()) != -1) { 
                System.out.write(tempbyte); 
            } 
            in.close(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
            return; 
        } 
        try { 
            System.out.println("以字节为单位读取文件内容,一次读多个字节:"); 
            // 一次读多个字节 
            byte[] tempbytes = new byte[100]; 
            int byteread = 0; 
            in = new FileInputStream(fileName); 
            ReadFromFile.showAvailableBytes(in); 
            // 读入多个字节到字节数组中,byteread为一次读入的字节数 
            while ((byteread = in.read(tempbytes)) != -1) { 
                System.out.write(tempbytes, 0, byteread); 
            } 
        } catch (Exception e1) { 
            e1.printStackTrace(); 
        } finally { 
            if (in != null) { 
                try { 
                    in.close(); 
                } catch (IOException e1) { 
                } 
            } 
        } 
    } 

    /** 
     * 以字符为单位读取文件,常用于读文本,数字等类型的文件 
     */ 
    public static void readFileByChars(String fileName) { 
        File file = new File(fileName); 
        Reader reader = null; 
        try { 
            System.out.println("以字符为单位读取文件内容,一次读一个字节:"); 
            // 一次读一个字符 
            reader = new InputStreamReader(new FileInputStream(file)); 
            int tempchar; 
            while ((tempchar = reader.read()) != -1) { 
                // 对于windows下,\r\n这两个字符在一起时,表示一个换行。 
                // 但如果这两个字符分开显示时,会换两次行。 
                // 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。 
                if (((char) tempchar) != '\r') { 
                    System.out.print((char) tempchar); 
                } 
            } 
            reader.close(); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
        try { 
            System.out.println("以字符为单位读取文件内容,一次读多个字节:"); 
            // 一次读多个字符 
            char[] tempchars = new char[30]; 
            int charread = 0; 
            reader = new InputStreamReader(new FileInputStream(fileName)); 
            // 读入多个字符到字符数组中,charread为一次读取字符数 
            while ((charread = reader.read(tempchars)) != -1) { 
                // 同样屏蔽掉\r不显示 
                if ((charread == tempchars.length) 
                        && (tempchars[tempchars.length - 1] != '\r')) { 
                    System.out.print(tempchars); 
                } else { 
                    for (int i = 0; i < charread; i++) { 
                        if (tempchars[i] == '\r') { 
                            continue; 
                        } else { 
                            System.out.print(tempchars[i]); 
                        } 
                    } 
                } 
            } 

        } catch (Exception e1) { 
            e1.printStackTrace(); 
        } finally { 
            if (reader != null) { 
                try { 
                    reader.close(); 
                } catch (IOException e1) { 
                } 
            } 
        } 
    } 

    /** 
     * 以行为单位读取文件,常用于读面向行的格式化文件 
     */ 
    public static void readFileByLines(String fileName) { 
        File file = new File(fileName); 
        BufferedReader reader = null; 
        try { 
            System.out.println("以行为单位读取文件内容,一次读一整行:"); 
            reader = new BufferedReader(new FileReader(file)); 
            String tempString = null; 
            int line = 1; 
            // 一次读入一行,直到读入null为文件结束 
            while ((tempString = reader.readLine()) != null) { 
                // 显示行号 
                System.out.println("line " + line + ": " + tempString); 
                line++; 
            } 
            reader.close(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } finally { 
            if (reader != null) { 
                try { 
                    reader.close(); 
                } catch (IOException e1) { 
                } 
            } 
        } 
    } 

    /** 
     * 随机读取文件内容 
     */ 
    public static void readFileByRandomAccess(String fileName) { 
        RandomAccessFile randomFile = null; 
        try { 
            System.out.println("随机读取一段文件内容:"); 
            // 打开一个随机访问文件流,按只读方式 
            randomFile = new RandomAccessFile(fileName, "r"); 
            // 文件长度,字节数 
            long fileLength = randomFile.length(); 
            // 读文件的起始位置 
            int beginIndex = (fileLength > 4) ? 4 : 0; 
            // 将读文件的开始位置移到beginIndex位置。 
            randomFile.seek(beginIndex); 
            byte[] bytes = new byte[10]; 
            int byteread = 0; 
            // 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。 
            // 将一次读取的字节数赋给byteread 
            while ((byteread = randomFile.read(bytes)) != -1) { 
                System.out.write(bytes, 0, byteread); 
            } 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } finally { 
            if (randomFile != null) { 
                try { 
                    randomFile.close(); 
                } catch (IOException e1) { 
                } 
            } 
        } 
    } 

    /** 
     * 显示输入流中还剩的字节数 
     */ 
    private static void showAvailableBytes(InputStream in) { 
        try { 
            System.out.println("当前字节输入流中的字节数为:" + in.available()); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 

    public static void main(String[] args) { 
        String fileName = "C:/temp/newTemp.txt"; 
        ReadFromFile.readFileByBytes(fileName); 
        ReadFromFile.readFileByChars(fileName); 
        ReadFromFile.readFileByLines(fileName); 
        ReadFromFile.readFileByRandomAccess(fileName); 
    } 
} 

5、将内容追加到文件尾部 
public class AppendToFile { 
    /** 
     * A方法追加文件:使用RandomAccessFile 
     */ 
    public static void appendMethodA(String fileName, String content) { 
        try { 
            // 打开一个随机访问文件流,按读写方式 
            RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw"); 
            // 文件长度,字节数 
            long fileLength = randomFile.length(); 
            //将写文件指针移到文件尾。 
            randomFile.seek(fileLength); 
            randomFile.writeBytes(content); 
            randomFile.close(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 

    /** 
     * B方法追加文件:使用FileWriter 
     */ 
    public static void appendMethodB(String fileName, String content) { 
        try { 
            //打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件 
            FileWriter writer = new FileWriter(fileName, true); 
            writer.write(content); 
            writer.close(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 

    public static void main(String[] args) { 
        String fileName = "C:/temp/newTemp.txt"; 
        String content = "new append!"; 
        //按方法A追加文件 
        AppendToFile.appendMethodA(fileName, content); 
        AppendToFile.appendMethodA(fileName, "append end. \n"); 
        //显示文件内容 
        ReadFromFile.readFileByLines(fileName); 
        //按方法B追加文件 
        AppendToFile.appendMethodB(fileName, content); 
        AppendToFile.appendMethodB(fileName, "append end. \n"); 
        //显示文件内容 
        ReadFromFile.readFileByLines(fileName); 
    } 
}

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

相关文章
根据不同的操作系统读取配置文件/java读取属性文件代码
package cn.com.css.common.util; /** * @brief OSEnum.java 操作系统的枚举 * @attention * @author 涂作权 * @date 2014年4月3日 * @note begin modify by null */public enum EOSPlatForm { Any("any"), Linux("Linux"), Mac
983 0
Java对文件的读、写随机访问,RandomAccessFile类的使用分析
  在网上看了一些关于java中的RandomAccessFile类的介绍,又经过查看Java API和自己编的测试程序,总算是对RandomAccessFile的使用有了一定的了解。自己做了以下比较详细的总结吧。
998 0
R语言 读取文件
1. R读取txt文件 使用R读取txt文件直接使用read.table()方法进行读取即可,不需要加载额外的包。 read.table("/home/slave/test.txt",header=T,na.strings = c("NA")) 注意,此处的na.strings = c("NA") 的意思是文件中的缺失数据都是用NA进行表示;在读取文本文件时,默认的分割符号为空格。
1024 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4513 0
JAVA读取EMF文件并转化为PNG,JPG,GIF格式
JAVA读取EMF文件并转化为PNG,JPG,GIF格式 使用第三方库下载地址为:http://java.freehep.org/vectorgraphics/index.html 主要思路: 使用EMFInputStream读取EMF文件,然后使用EMFRenderer对象将EMF绘制到创建 好的空白的BufferedImage里面。
1261 0
+关注
自娱
阿里巴巴无线客户端性能与安全负责人 Gradle中文文档作者
158
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载