Java文件操作及IO流理解

本文介绍了Java中如何使用File类进行文件和目录的操作,并详细解释了不同类型的输入/输出流,包括字节流和字符流,节点流和处理流。提供了一个具体的例子,展示如何读取并修改目录下所有txt文件的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

File类是java.io包下代表与平台无关的文件和目录,不管是文件还是目录都可以使用File操作,File能新建、删除、重命名文件和目录,但不能访问文件内容本身,访问文件内容需要使用输入/输出流。使用文件路径字符串来创建File类实例,既可以是绝对路径也可以是相对路径。

Tips:Windows的路径分隔符使用反斜线\,而Java程序中\表示转义字符,所以如果需要在Java程序中包含windows路径则需要使用两跳反斜线\\,比如"C:\\Frogram Files\\"。或者可以直接使用斜线/,Java允许将斜线当成平台无关的路径分隔符。

在Java中把不同的输入/输出源(键盘、文件、网络连接等)抽象表述为流(stream)。Java的输入流主要由InputStream和Reader作为基类,输出流主要由OutputStream和Writer作为基类。但它们都是一些抽象基类无法创建实例。

Java中的流又可以分为字节流和字符流,字节流操作的数据单元是8位的字节,字符流操作的数据单元是16位的字符。字节流主要由InputStream和OutputStream作为基类,而字符流则主要由Reader和Writer作为基类。

Java中的流还可以分为节点流和处理流,节点流直接连接到低级的数据源,处理流则是对一个已存在的流进行连接或封装,通过封装后的流来实现数据读/写得功能。

FileInputStream、FileReader、FileOutputStream、FileWriter是基本的节点流,直接和指定文件关联。

Tips:Windows平台的换行符是\r\n,Linux下使用\n做换行符

一般不直接使用节点流,而是使用可以隐藏底层上节点流差异的处理流进行更加方便地输入输出。

经常使用的处理流有:BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter,PrintStream,StringReader,StringWriter等。

以下程序实现了将一个目录下的所有txt文件的每行数字加1的功能:

        File file = new File("D:\\tmp\\");
        String[] fileList = file.list();
        for (String fileName : fileList) {
            StringBuffer sb= new StringBuffer("");
            FileReader reader = new FileReader("D:\\tmp\\" + fileName);
            BufferedReader br = new BufferedReader(reader);
            String str;
            while((str = br.readLine()) != null) {
                int num = Integer.parseInt(str) + 1;
                sb.append(num+"\r\n");
                //System.out.println(str);
            }
            br.close();
            reader.close();
            // write string to file
            FileWriter writer = new FileWriter("D:\\tmp\\" + fileName);
            BufferedWriter bw = new BufferedWriter(writer);
            bw.write(sb.toString());
            bw.close();
            writer.close();
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值