[转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); 
    } 
}
目录
相关文章
|
10天前
|
Java
使用IDEA创建项目运行我的第一个JAVA文件输出Helloword
本文介绍了如何使用IDEA(IntelliJ IDEA)创建一个新的Java项目,并运行一个简单的Java程序输出"Hello Word"。文章详细展示了创建项目的步骤,包括选择JDK版本、设置项目名称和路径、创建包和类,以及编写和运行代码。最后,还展示了如何通过IDEA的运行功能来执行程序并查看输出结果。
31 4
使用IDEA创建项目运行我的第一个JAVA文件输出Helloword
|
10天前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
27 1
|
2月前
|
Java Apache 开发工具
【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK(Java) 输出日志并以文件形式保存
【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK(Java) 输出日志并以文件形式保存
|
4天前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
12 2
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
|
6天前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
18 4
|
8天前
|
安全 Java API
Java根据URL获取文件内容的实现方法
此示例展示了如何安全、有效地根据URL获取文件内容。它不仅展现了处理网络资源的基本技巧,还体现了良好的异常处理实践。在实际开发中,根据项目需求,你可能还需要添加额外的功能,如设置连接超时、处理HTTP响应码等。
44 4
|
15天前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
1月前
|
Arthas Java 测试技术
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
Java字节码文件、组成、详解、分析;常用工具,jclasslib插件、阿里arthas工具;如何定位线上问题;Java注解
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
|
8天前
|
Java
Java-FileInputStream和FileOutputStream的使用,txt文件及图片文件的拷贝
这篇文章介绍了Java中FileInputStream和FileOutputStream的使用,包括如何读取和写入txt文件以及如何拷贝图片文件。
Java-FileInputStream和FileOutputStream的使用,txt文件及图片文件的拷贝
|
11天前
|
存储 缓存 监控
Java——图片文件位于 bin 目录下,下载新图片会导致应用程序重启
【9月更文挑战第22天】在Java应用中,若图片位于bin目录下且下载新图片导致应用重启,可能是因为部署方式不当或资源监控机制过于敏感。解决方法包括:更改图片存储位置至独立目录;配置应用服务器减少资源监控敏感度;使用独立资源服务器托管静态资源;优化代码减少资源重复加载。具体方案需根据应用实际情况和技术栈调整。
下一篇
无影云桌面