`
红桃貳
  • 浏览: 40303 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java 学习笔记- File I/O - 文件的读写

阅读更多

JDK7 中Files类对文件的读写操作大概可以分为:

1. 读取和写入所有字节

 /**
     * Read all bytes from a file.
     * 
     * @param path
     * @return
     * @throws IOException
     */
    public static byte[] readAllBytes(Path path) throws IOException {
        return Files.readAllBytes(path);
    }

    /**
     * Write all bytes to a file.
     * 
     * @param path
     * @param bytes
     * @param option
     * @throws IOException
     */
    public static void writAllBytes(Path path, byte[] bytes, OpenOption option) throws IOException {
        Files.write(path, bytes, option);
    }

 这两个方法要求文件不能够太大,如果文件大小,size > (long)Integer.MAX_VALUE,throw new OutOfMemoryError("Required array size too large");

 

2.读取或写入所有的行。

/**
     * Read all lines from a file.
     * 
     * @param path
     * @param cs
     * @return
     * @throws IOException
     */
    public static List<String> readAllLines(Path path, Charset cs) throws IOException {
        return Files.readAllLines(path, cs);
    }

    /**
     * Write all lines to a file.
     * 
     * @param path
     * @param lines
     * @param cs
     * @param option
     * @throws IOException
     */
    public void writeAllLines(Path path, List<String> lines, Charset cs, OpenOption option) throws IOException {
        Files.write(path, lines, cs, option);
    }

 这两个方法也是一次性操作所有的字节,对于读操作,BufferedReader逐行读取。对于写操作使用BufferedWriter逐行向文件写入。对于大文件这个方法也处理不来。

3.通过Buffered Stream I/O 读写。

 

/**
     * Reading a File by Using Buffered Stream I/O
     * 
     * @param path
     * @param cs
     * @return
     * @throws IOException
     */
    public static List<String> readByBufferedStream(Path path, Charset cs) throws IOException {
        BufferedReader reader = null;
        try {
            reader = Files.newBufferedReader(path, cs);
            String line = null;
            List<String> lines = new ArrayList<String>();
            while ((line = reader.readLine()) != null) {
                lines.add(line);
            }
            return lines;
        } catch (IOException e) {
            throw (e);
        } finally {
            if (reader != null)
                reader.close();
        }
    }

    /**
     * Writing a File by Using Buffered Stream I/O
     * 
     * @param path
     * @param lines
     * @param cs
     * @param options
     * @throws IOException
     */
    public static void writeByBufferedStream(Path path, List<String> lines, Charset cs, OpenOption options)
            throws IOException {

        BufferedWriter writer = null;
        try {
            writer = Files.newBufferedWriter(path, cs, options);
            for (String line : lines) {
                writer.write(line);
            }
        } catch (IOException e) {
            throw (e);
        } finally {
            if (writer != null)
                writer.close();
        }
    }

 4.通过stream I/O读写文件

  /**
     * Reading a File by Using Stream I/O
     * 
     * @param path
     * @return
     * @throws IOException
     */
    public static List<String> readByStream(Path path) throws IOException {
        List<String> lines = new ArrayList<>();
        InputStream in = null;
        BufferedReader reader = null;
        try {
            in = Files.newInputStream(path, StandardOpenOption.READ);
            reader = new BufferedReader(new InputStreamReader(in));
            String line = null;
            while ((line = reader.readLine()) != null) {
                lines.add(line);
            }
        } catch (IOException e) {
            throw (e);
        } finally {
            if (in != null) {
                in.close();
            }
            if (reader != null) {
                reader.close();
            }
        }
        return lines;
    }

    /**
     * Write to a file by Stream I/O
     * 
     * @param lines
     * @param path
     * @param options
     * @param cs
     * @throws IOException
     */
    public static void writeByStream(List<String> lines, Path path, Charset cs, OpenOption... options)
            throws IOException {
        OutputStream out = null;
        try {
            out = new BufferedOutputStream(Files.newOutputStream(path, options));
            for (String line : lines) {
                out.write(line.getBytes(cs), 0, line.length());
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (out != null)
                out.close();
        }
    }

 5.通过Channel I/O读写文件

 /**
     * Read or write by Using Channel I/O
     * 
     * @param path
     * @param options
     * @throws IOException
     */
    public static void readAndWriteByChannel(Path readPath, Path writePath) throws IOException {

        ByteChannel rbc = null;
        ByteChannel wbc = null;
        try {
            if (!Files.exists(writePath, LinkOption.NOFOLLOW_LINKS)) {
                Files.createFile(writePath);
            }
            rbc = Files.newByteChannel(readPath, StandardOpenOption.READ);
            wbc = Files.newByteChannel(writePath, StandardOpenOption.APPEND);
            ByteBuffer buf = ByteBuffer.allocate(10);
            String encoding = System.getProperty("file.encoding");
            while (rbc.read(buf) > 0) {
                System.out.println("before rewind:\n" + buf);
                buf.rewind();
                System.out.println("after rewind:\n" + buf);
                CharBuffer cb = Charset.forName(encoding).decode(buf);
                buf.rewind();
                wbc.write(buf);
                System.out.println(cb);
                System.out.println("before flip:\n" + buf);
                buf.flip();
                System.out.println("after flip:\n" + buf);
            }

        } catch (IOException e) {
            System.out.println("caught exception: " + e);
            e.printStackTrace();
        } finally {
            if (rbc != null) {
                rbc.close();
            }
            if (wbc != null) {
                rbc.close();
            }
        }
    }

 

 

 

分享到:
评论

相关推荐

    java学习笔记-html-ssh-js

    【Java学习笔记】 在Java的学习旅程中,深入理解其核心概念是至关重要的。Java是一种广泛使用的面向对象的编程语言,以其跨平台性、高效性和稳定性而受到青睐。本笔记集合将带你逐步走进Java的世界,从基础语法到...

    java文件读写操作

    这篇学习笔记将带你初探这个领域,适合新手入门。我们将讨论如何使用Java进行文件的读取、写入以及一些常见的应用场景。 首先,Java提供了java.io包,其中包含了许多类用于处理输入输出,如File类、FileReader/...

    java笔记-从浅入深的入门学习

    文件和IO操作是任何编程语言的基础,Java提供了丰富的类库支持文件读写,如File、BufferedReader和PrintWriter。网络编程在Java中也很常见,Socket编程允许你创建客户端和服务器应用程序。 Java的泛型提供了类型...

    文件IO学习笔记

    本篇学习笔记将深入探讨文件I/O的基本概念、常见API、操作模式以及一些实用技巧,旨在帮助初学者快速入门。 首先,我们来了解一下什么是文件I/O。在计算机系统中,文件I/O是指应用程序通过操作系统提供的接口,与...

    java学习笔记

    在输入/输出(I/O)和文件操作方面,读者将学习到如何使用File类进行文件的创建、读写和删除,以及流的概念,包括字节流和字符流,以及如何使用缓冲区提高效率。 网络编程也是Java的一大亮点,Java学习笔记会介绍...

    Java IO学习笔记+代码

    Java IO是Java编程语言中用于输入/输出操作的重要部分,它提供了一系列的类和方法来处理数据的读写,文件的创建、删除以及流的管理等。以下是对标题和描述中涉及的知识点的详细说明: 1. **文件对象的生成**: 在...

    java_I/O流的教程

    本教程详细讲解了这些知识点,并配以代码示例和笔记,旨在帮助学习者逐步掌握Java I/O流的使用,无论你是初学者还是有一定经验的开发者,都能从中受益。通过深入学习和实践,你将能够熟练地处理各种数据输入输出场景...

    java学习笔记之Java-IO操作共19页.pdf.zi

    【Java IO操作详解】 在Java编程中,IO(Input/Output)操作是处理数据输入与输出的核心技术。Java-IO操作共19页的笔记详细介绍了这一关键领域,旨在帮助...这19页的学习笔记将是你掌握Java IO操作的重要参考资料。

    java代码笔记2010-06-11:java_x_文件_字节流,创建一个一个文件目录,在该目录下创建一个文件 txt, 然后写入内容进去, 再读取文件.

    在Java编程中,文件操作是常见的任务之一,包括创建、读写和管理文件。这篇2010年6月11日的Java代码笔记主要关注的...对于初学者来说,这是一个很好的起点,可以进一步深入学习Java I/O系统以及更高级的文件操作技术。

    Java学习笔记(整理)

    10. **文件操作**:Java提供了File类来处理文件和目录,如创建、删除、移动和读写文件。 11. **网络编程**:Java的Socket和ServerSocket类可用于网络通信,实现客户端-服务器模式的应用。 12. **反射机制**:反射...

    java学习笔记JDK6课件之十四

    `File`类是Java I/O系统中的基石,它提供了一种抽象的方式来表示文件和目录。在不同的操作系统上,文件系统的路径表示方式可能不同,例如Windows使用反斜杠(\)而Linux使用正斜杠(/)。`File`类提供了许多方法来...

    最全的java学习笔记(必看).pdf

    Java I/O流(如RandomAccessFile、FileInputStream、FileOutputStream)为程序读写文件提供了方法。Java还提供了对网络通信的支持,比如Socket编程。 Java中的线程是程序执行流的最小单位,提供并行计算的能力。...

    java学习笔记.doc

    Java学习笔记概述 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems开发,现在由甲骨文公司维护。它的设计目标是具有简单性、面向对象、健壮性、安全性、可移植性和高性能等特性。本笔记主要围绕Java的...

    JAVA NIO学习笔记.docx

    Java NIO(New Input/Output)是Java标准库在JDK 1.4引入的一组新的I/O API,它提供了一种不同于传统IO的高效、非阻塞的I/O操作方式。NIO的核心概念包括Channel、Buffer和Selector,它们共同构建了一个与操作系统...

    面向对象大胆向前 Java API 实战-Markdown格式的笔记

    笔记会探讨File类和相关流的使用,以及文件路径和I/O操作的细节。 ### 5. IO流(5:IO Stream-Java API 实战.md) Java的I/O流系统是处理输入输出的强大工具,适用于处理各种数据源。笔记会讲解字节流和字符流的...

    java源码笔记

    - 文件操作:File类和FileInputStream/FileOutputStream用于文件的读写操作。 - NIO(New I/O):非阻塞I/O模型,适用于大量并发连接的场景。 8. **异常处理** - 自定义异常:了解如何创建和抛出自定义异常,...

    java学习笔记,全程

    【Java学习笔记全程详解】 Java作为一种广泛应用于企业级开发、移动应用、大数据处理等领域的编程语言,其学习过程涵盖了许多核心概念和技术。这份"我的Java学习笔记"详细记录了作者在学习Java过程中积累的心得体会...

    java学习笔记,大家你享一下哈

    总的来说,这份“java学习笔记”涵盖了Java编程的关键知识点,包括但不限于基本语法、面向对象特性、集合框架、I/O操作、网络编程和异常处理。对于初学者而言,通过深入学习和实践,可以逐步掌握这个强大的编程工具...

    Java学习笔记(必看经典)

    这份“Java学习笔记(必看经典)”涵盖了Java语言的基础到进阶内容,对于想要深入理解Java的开发者来说是一份宝贵的资源。 首先,Java语言基础包括语法结构、数据类型、变量、运算符、流程控制等。Java支持两种主要的...

Global site tag (gtag.js) - Google Analytics