Java文件操作与输入输出流

简介:

文件操作

package ch15;

import java.io.*;

/**
 * Created by Jiqing on 2016/12/28.
 */
public class FileTest {
    public static void main(String[] args) throws IOException{
        // 以当前路径创建一个File对象
        File file = new File(".");
        System.out.println(file.getName());
        // 获取相对路径
        System.out.println(file.getParent());
        // 获取绝对路径
        System.out.println(file.getAbsoluteFile()); //C:\Users\e550\IdeaProjects\crazyJava\.
        // 获取上级路径
        System.out.println(file.getAbsoluteFile().getParent()); //C:\Users\e550\IdeaProjects\crazyJava

        // 在当前路径下创建一个临时文件
        File tmpFile = File.createTempFile("temp",".txt",file);
        // 指定当JVM退出时删除文件
        tmpFile.deleteOnExit();

        // 使用list()方法列出当前路径下所有文件和路径
        String[] fileList = file.list();
        System.out.println("====当前路径下所有文件和路径如下====");
        for (String fileName :fileList) {
            System.out.println(fileName);
        }

        // listRoots() 静态方法列出所有磁盘根路径
        File[] roots = File.listRoots();
        for(File root:roots) {
            System.out.println(root);
        }
    }
}

执行结果:

. null C:\Users\e550\IdeaProjects\crazyJava. C:\Users\e550\IdeaProjects\crazyJava 当前路径下所有文件和路径如下 .git .idea crazyJava.iml image out src temp108678927822844352.txt C:
D:
E:
F:\

方法论:尝试自己改造一下,能够加深对内容的理解。

Java可以读取并操作文件,还是蛮厉害的。

Java中的IO流

在Java中把不同的输入输出源(键盘、文件、网路连接)抽象表述为“流”。

1.输入流、输出流

2.字节流、字符流

字节流通过InputStream和OutputStream来操作,数据单元是8位的字节

字符流通过Reader和Writer来操作,数据单元是16位的字符

3.节点流、处理流

处理流可以包装节点流进行数据传输,通过处理流,Java程序无需理会输入输出节点是磁盘、网络还是其他输入输出设备,程序只要将节点包装成处理流,就可以使用相同的输入、输出代码来读不通的输入输出设备的数据。

package ch15;

import java.io.*;

/**
 * Created by Jiqing on 2016/12/28.
 */
public class FileInputStreamTest {
    public static void main(String[] args) throws IOException {
        File file = new File(".");
        // 创建字节输入流
        FileInputStream fis = new FileInputStream(file.getAbsoluteFile().getParent()+"/src/ch15/FileInputStreamTest.java");

        // 创建一个长度为1024的竹筒
        byte[] bbuf = new byte[1024];

        // 保存实际读取的字节数
        int hasRead = 0;

        // 使用循环来重复“取水”
        while ((hasRead = fis.read(bbuf)) > 0) {
            // 取出竹筒中的水滴
            System.out.print(new String(bbuf,0,hasRead));
        }

        // 关闭文件输入流
        fis.close();
    }
}

package ch15;

import java.io.*;

/**
 * Created by Jiqing on 2016/12/28.
 */
public class FileReaderTest {
    public static void main(String[] args) throws IOException {
        File file = new File(".");
        try(
            // 创建字符输入流,输入到内存
            FileReader fr = new FileReader(file.getAbsoluteFile().getParent()+"/src/ch15/FileReaderTest.java"))
        {
            // 创建一个长度为32的竹筒
            char[] cbuf = new char[32];
            // 用于保存实际读取的字符数
            int hasRead = 0;
            // 使用循环来重复取水
            while ((hasRead = fr.read(cbuf)) > 0) {
                System.out.print(new String(cbuf,0,hasRead));
            }
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

竹筒的长度只要大于单位长度即可,32表示一次装入的字符数

package ch15;

import java.io.*;

/**
 * Created by Jiqing on 2016/12/28.
 */
public class FileInputStreamTest {
    public static void main(String[] args) throws IOException {
        File file = new File(".");
        // 创建字节输入流
        FileInputStream fis = new FileInputStream(file.getAbsoluteFile().getParent()+"/src/ch15/FileInputStreamTest.java");

        FileOutputStream fos = new FileOutputStream("newFile.txt");

        // 创建一个长度为1024的竹筒
        byte[] bbuf = new byte[128];

        // 保存实际读取的字节数
        int hasRead = 0;

        // 使用循环来重复“取水”
        while ((hasRead = fis.read(bbuf)) > 0) {
            // 取出竹筒中的水滴
//            System.out.println(hasRead);
//            System.out.print(new String(bbuf,0,hasRead));
            fos.write(bbuf,0,hasRead);
        }

        // 关闭文件输入流
        fis.close();
    }
}

package ch15;

import java.io.*;

/**
 * Created by Jiqing on 2016/12/28.
 */
public class FileReaderTest {
    public static void main(String[] args) throws IOException {
        File file = new File(".");
        try(
            // 创建字符输入流,输入到内存
            FileReader fr = new FileReader(file.getAbsoluteFile().getParent()+"/src/ch15/FileReaderTest.java");
            FileWriter fw = new FileWriter("newWriterFile.txt")
        )
        {
            // 创建一个长度为32的竹筒
            char[] cbuf = new char[32];
            // 用于保存实际读取的字符数
            int hasRead = 0;
            // 使用循环来重复取水
            while ((hasRead = fr.read(cbuf)) > 0) {
//                System.out.println(hasRead);
//                System.out.print(new String(cbuf,0,hasRead));
                fw.write(cbuf,0,hasRead);
            }
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

流就是水滴,有意思。输入流,从文件输入到内存。输出流,从内存输出到硬盘。输入,表示读取数据。输出,表示写入数据。



本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/6231290.html,如需转载请自行联系原作者

相关文章
|
5月前
|
Java
揭秘Java文件操作背后的惊天秘密:读写、复制、删除一网打尽!
【6月更文挑战第27天】Java文件操作涵盖读、写、复制和删除。例如,读文件使用`BufferedReader`和`FileReader`;写文件利用`BufferedWriter`和`FileWriter`;复制文件通过读写流实现;删除文件则依赖`Files.delete()`。以上代码示例展示了具体实现。
37 5
|
5月前
|
Java API
Java文件操作,你的电脑“硬盘”竟然可以这样玩?!
【6月更文挑战第27天】Java文件操作涵盖创建、读取、写入、复制、删除等。`java.io`和`java.nio.file`包提供API,如`BufferedReader/FileReader`用于读取,`BufferedWriter/FileWriter`用于写入,`Files.copy()`用于复制,`Files.delete()`用于删除文件。以上代码示例展示了这些功能的简单用法。
38 1
|
5月前
|
Java
【Java基础】输入输出流(IO流)
Java基础、输入输出流、IO流、流的概念、输入输出流的类层次结构图、使用 InputStream 和 OutputStream流类、使用 Reader 和 Writer 流类
164 2
|
6月前
|
Java API
Java的文件操作:创建、读写与删除的技术性详解
Java的文件操作:创建、读写与删除的技术性详解
48 1
|
5月前
|
安全 Java 开发者
掌握Java文件操作,让你的代码“飞”起来!读写、复制、删除全攻略!
【6月更文挑战第27天】Java文件操作涵盖读写、复制、删除。使用NIO的`Files`类提升效率:读取文件用`newBufferedReader`实现逐行读,写入文件用`newBufferedWriter`,复制文件用`copy`方法,删除文件用`deleteIfExists`,确保安全。这些最佳实践优化了内存使用,简化了代码。
35 0
|
2月前
|
Java
Java文件操作
本文介绍了Java中`File`类的使用方法,包括构造方法、常见成员方法及其实现功能。`File`对象可以表示文件或文件夹,支持绝对路径和相对路径。构造方法有三种:基于完整路径、父级路径与子路径组合、`File`对象与字符串组合。成员方法涵盖判断类型、获取大小、获取路径、创建与删除文件/文件夹、获取文件列表、重命名等操作。文章通过示例代码详细展示了各个方法的应用场景及注意事项。
40 1
Java文件操作
|
5月前
|
监控 Java API
Java文件操作大揭秘:不只是读写,还有这些逆天技巧!
【6月更文挑战第27天】Java文件操作不仅包括基础的读写,还有NIO的文件过滤、锁定、映射以及压缩解压和文件变化监控。例如,使用Files.walk结合PathMatcher查找特定类型的文件,利用FileChannel进行文件锁定和内存映射以提升效率,借助ZipOutputStream压缩文件,以及用WatchService监听文件系统变化。这些高级技巧能提升开发效率。
31 3
|
5月前
|
Java API
惊呆了!Java文件操作竟能如此简单:一分钟学会读写、复制、删除!
【6月更文挑战第27天】Java编程中的文件操作简单易行。使用`java.io`包中的`FileInputStream`和`FileOutputStream`进行读写,例如写文件将字符串转为字节写入,读文件则循环读取字节。文件复制涉及两个流,从源文件读取后写入目标文件。删除文件只需调用`File`对象的`delete`方法。这些基本操作让Java文件处理变得直观且易于掌握。
33 1
|
5月前
|
存储 网络协议 Java
Java I/O 详解:基础、文件操作与 NIO 实践
Java I/O 详解:基础、文件操作与 NIO 实践
51 1
|
4月前
|
Java 数据库
Java面试题:请解释Java中的输入输出(I/O)流?详细说明应用场景
Java面试题:请解释Java中的输入输出(I/O)流?详细说明应用场景
33 0
下一篇
无影云桌面