`
everlxq
  • 浏览: 108661 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

读取文件 多种方法

 
阅读更多
package io;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader;

public class FileRead {

    /**
     * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
     */
    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);
            FileRead.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 = "D:/lxq/zhuanyi/账号.txt";
        FileRead.readFileByBytes(fileName);
        FileRead.readFileByChars(fileName);
        FileRead.readFileByLines(fileName);
        FileRead.readFileByRandomAccess(fileName);
    }

}
分享到:
评论

相关推荐

    VC实现读写文件的三种方法

    总结,VC++中实现文件读写有多种方法,包括Linux的文件句柄方式、MFC的CFile类以及标准库的文件指针方式。每种方法都有其适用场景和优缺点,开发者应根据项目需求选择合适的方式。在处理二进制文件时,确保采用正确...

    虚拟机磁盘文件如何在宿主机系统上读取文件的方法

    虚拟机磁盘文件如何在宿主机系统上读取文件的方法 虚拟机磁盘文件如何在宿主机系统上读取文件的方法是虚拟机技术中一个重要的问题。虚拟机磁盘文件是指虚拟机中的磁盘文件,它可以是 disk0、disk1 等形式的文件。...

    java读取文件方法大全

    根据给定的文件信息,我们可以总结出一系列关于Java中读取文件的方法,这些方法涵盖了不同层次的数据读取,包括字节、字符以及行级别的读取。以下是对这些知识点的详细阐述: ### Java读取文件方法大全:读取File流...

    [Java]读取文件方法大全.pdf

    本文将详细介绍四种常见的文件读取方法:按字节读取文件内容、按字符读取文件内容、按行读取文件内容和随机读取文件内容。 一、按字节读取文件内容 按字节读取文件内容是指以字节为单位读取文件的内容,这种方式常...

    Java基于IO流读取文件的方法

    为了读取文件,Java提供了多种流类型。在这个例子中,我们使用了`FileInputStream`,它是字节输入流的一种,适用于读取二进制文件。创建`FileInputStream`对象,如`is = new FileInputStream(file)`,这里的`file`是...

    读取XML文件的四种方法

    在Java中,读取XML文件有多种方法,本文将介绍四种常见的方法:DOM、DOM4J、JDOM和SAX。 DOM(Document Object Model) DOM是W3C组织制定的XML文档对象模型,它提供了对XML文档的树形结构表示。使用DOM方法读取XML...

    Android读取本地json文件的方法(解决显示乱码问题)

    - **Android文件操作**:Android提供了多种文件操作方法,包括读写文件、文件流操作等。 - **SD卡操作**:Android允许应用在外部存储(如SD卡)上进行文件操作,但需要注意权限问题。 - **Android视图View和控件**:...

    Java读取文件方法大全

    Java语言在处理文件I/O操作时提供了多种方法,这些方法可以按照不同的策略读取文件,例如按字节或字符进行。下面将详细讲解Java中读取文件的主要方法,并结合给出的代码片段进行分析。 首先,Java中最基础的文件...

    Android 读写文件实例

    Android提供了多种方法获取不同类型的文件目录: - `getFilesDir()`:返回应用的私有文件目录,只有该应用可以访问。 - `getExternalFilesDir(null)`:返回应用在SD卡上的私有文件目录,如果SD卡不可用,则返回内部...

    python中的文件读写练习题(csdn)————程序.pdf

    Python 语言提供了多种文件读写方式,包括文本文件、CSV 文件、Excel 文件等。 读取 CSV 文件 CSV (Comma Separated Values) 文件是一种通用的文本文件格式,常用于数据交换和存储。 Python 中有多种方式可以读取...

    java多种读取文件方式

    ### Java多种读取文件方式详解 在Java编程中,文件操作是常见的需求之一,尤其是在处理大量数据时。本文将详细介绍几种常用的文件读取方法,并针对每种方法的特点、适用场景及示例代码进行深入解析。 #### 一、...

    两种WinCE读取txt文件内容的方法

    WinCE操作系统中,读取txt文件内容有多种方法,本文将介绍两种常见的方法:直接读取文件全部内容和逐行读取文件内容。 直接读取文件全部内容 使用 WinCE 的文件读取函数CreateFile、ReadFile和CloseHandle,可以...

    linux c 配置文件读写

    首先,配置文件的格式多种多样,如文本文件(.txt)、INI文件(.ini)等。在提供的压缩包中,我们看到了`iniFileRW.C`和`maintest.c`两个源文件以及`IniFile.h`头文件,这表明示例代码可能使用了INI文件作为配置文件...

    Qt之读写ini文件

    它支持多种存储格式,包括`.ini`文件。`.ini`文件是一种简单的文本格式,通常用于保存键值对,方便程序进行配置管理。 首先,你需要包含必要的头文件并创建`QSettings`对象。在Qt5.12.7版本中,可以这样做: ```...

    C++读写ini配置文件

    - 考虑到ini文件的通用性,应支持多节、空节、键值对之间有空格等多种情况。 通过以上设计,我们可以构建一个强大且灵活的ini配置文件读写库。"rwconfig.cpp"和"rwconfig.h"文件可能已经实现这些功能,通过它们,...

    探寻C++最快的读取文件的方案 C++ IO优化

    3. `mmap`映射文件到内存的方法提供了最快的整体读取速度,尤其适合处理大型文件。 综上所述,根据实际需求选择合适的读取方式非常重要。对于较小的数据量,`cin`和`scanf`都是不错的选择;而对于大数据量,考虑...

    Linux Windows C++读写ini文件

    这种轻量级的文件格式易于阅读和修改,同时兼容多种操作系统,包括Windows和Linux。C++作为一门强大的系统级编程语言,自然支持对ini文件的读写操作。下面我们将详细介绍在Linux和Windows环境下,如何使用C++来处理...

    易语言读写文件到字节集

    在易语言中,处理文件操作是一项基础且重要的任务,而“读写文件到字节集”则是这一任务的具体体现。字节集是易语言中用来存储二进制数据的数据类型,它在处理文件、网络传输或者内存操作时非常有用。 1. **字节集...

    C# 读取EXCEL文件的三种经典方法.docx

    在C#中,读取Excel文件有多种方法,这里我们将探讨三种经典方法。这些方法主要应用于需要从Excel文件中提取数据或与Excel文件交互的场景。 **方法一:采用OleDB读取Excel文件** OleDb是.NET Framework提供的一种...

Global site tag (gtag.js) - Google Analytics