File 类和 InputStream, OutputStream 的用法总结

2023-10-26

 

目录

一、File 类

1.File类属性

2.构造方法

3.普通方法

二、InputStream

1.方法

2.FileInputStream

三、OutputStream 

1.方法

2.FileOutputStream

四、针对字符流对象进行读写操作 


一、File 类

1.File类属性

修饰符及类型 属性 说明
static String pathSeparator 依赖于系统的路径分隔符,String类型的表示
static char pathSeparator 依赖于系统的路径分隔符,char类型的表示

2.构造方法

签名 说明
File(File parent, Stringchild) 根据父目录 + 孩子文件路径,创建一个新的 File 实例
File(String pathname) 根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者相对路径
File(String parent, Stringchild) 根据父目录 + 孩子文件路径,创建一个新的 File 实例,父目录用路径表示

3.普通方法

 下面代码是一些普通方法的使用例子

import java.io.File;
import java.io.IOException;
 
public class IoDemo1 {
 
    public static void main(String[] args) throws IOException {
        File file = new File("D:/手机照片备份/myphone_72089A8996EA/知乎");
 
        System.out.println(file.getParent()); //上一级路径
        System.out.println(file.getName());   //文件名字
        System.out.println(file.getPath());   // 相对路径
        System.out.println(file.getAbsolutePath());   //绝对路径
        System.out.println(file.getCanonicalPath());  //修饰过的绝对路径
    }
}

下面是方法的部分说明:

二、InputStream

1.方法

签名 说明
read() 读取一个字节的数据,返回 -1 代表已经完全读完了
read(byte[] b) 最多读取 b.length 字节的数据到 b 中,返回实际读到的数量;-1 代表以及读完了
read(byte[] b,int off, int len) 最多读取 len - off 字节的数据到 b 中,放在从 off 开始,返回实际读到的数量;-1 代表以及读完了
close() 关闭字节流

InputStream 只是一个抽象类,要使用还需要具体的实现类。关于 InputStream 的实现类有很多,基本可以认为不同的输入设备都可以对应一个 InputStream 类,我们现在只关心从文件中读取,所以使用FileInputStream


2.FileInputStream

构造方法:

签名 说明
FileInputStream(File file) 利用 File 构造文件输入流
FileInputStream(String name) 利用文件路径构造文件输入流

 读取文件操作:

package io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class IODemo6 {
    public static void main(String[] args) throws IOException {
        // 这个过程, 相当于 C 中的 fopen , 文件的打开操作~~
//        InputStream inputStream = null;
//        try {
//            inputStream = new FileInputStream("d:/test.txt");
//        } finally {
//            inputStream.close();
//        }

        try (InputStream inputStream = new FileInputStream("d:/test.txt")) {
            // 读文件
            // read 一次返回的是一个字节. 但是此处的返回值类型是 int !!!
            while (true) {
                int b = inputStream.read();
                if (b == -1) {
                    // 读到末尾了, 结束循环即可
                    break;
                }
                System.out.printf("%x\n", b);
            }
        }
    }
}

三、OutputStream 

1.方法

签名 说明
write(int b) 写入要给字节的数据
write(byte[]b)) 将 b 这个字符数组中的数据全部写入 os 中
write(byte[]b, int off,int len) 将 b 这个字符数组中从 off 开始的数据写入 os 中,一共写 len 个
close() 关闭字节流
flush()     我们知道 I/O 的速度是很慢的,所以,大多的 OutputStream 为了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,调用 flush(刷新)操作,将数据刷到设备中。

2.FileOutputStream

构造方法:

签名 说明
FileOutputStream(File file) 利用 File 构造文件输出流
FileOutputStream(String name) 利用文件路径构造文件输出流

 写入文件操作:

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Scanner;

public class IODemo7 {


    public static void main(String[] args) {

        try (OutputStream outputStream = new FileOutputStream("f:/bb.txt ")){
            outputStream.write(97);
            outputStream.write(98);
            outputStream.write(99);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

四、针对字符流对象进行读写操作 

使用reader进行文件的读操作。

import java.io.*;

public class IODemo6 {


    public static void main(String[] args) throws IOException {



        try (Reader reader = new FileReader("F:/bb.txt" )){
            while (true){
               int b = reader.read();
            if (b == -1){
                break;
            }
                System.out.printf("%x\n", b);
            }
        }
    }
}

  使用write进行写操作

import java.io.*;
public class text {
    public static void main(String[] args) throws IOException {
        Writer writer=new FileWriter("D:/xxx.txt");
        writer.write("123456");
        writer.close();
    }
}

以上就是这三个内容的概述,希望对你有帮助 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

File 类和 InputStream, OutputStream 的用法总结 的相关文章

  • 如何降级旧版 Android 中的 java.time 代码?

    我有这个简洁的代码 它生成两个日期之间的天数列表 然后是当天的日期 以及它在列表中的位置 最重要的是 所有日期都采用相同的格式 这使得很容易比较它们 Create list of days String s 2018 08 28 Strin
  • 在 Java 中显式调用默认方法

    Java 8 引入默认方法 http cr openjdk java net dlsmith jsr335 jsr335 0 6 2 H html提供扩展接口的能力 而无需修改现有的实现 我想知道当该方法已被覆盖或由于不同接口中的默认实现冲
  • 斯卡拉。浮点数的奇怪结果

    为什么减法时会得到奇怪的结果2 99999 from 3 scala gt math sqrt 3 res0 Double 1 7320508075688772 scala gt math pow res0 2 res1 Double 2
  • java对象间通信

    还在学习Java Swing 又让我问了这个问题 但这确实是一个普遍的面向对象问题 如果我有一个主类 包含 main 它会创建一个执行某些操作的新对象 A 主类现在具有对该对象的引用 对象 B 如何访问该对象的属性 我能想到的唯一方法是让主
  • tomcat.conf 位于哪里?

    我找不到我的tomcat conf 我看过 etc tomcat6 但它不在那里 也不在 usr share tomcat6 我在哪里可以找到tomcat conf在 Linux Ubuntu 中 Try sudo updatedb loc
  • Java 泛型(通配符)

    我有几个关于 Java 中通用通配符的问题 有什么区别List 基本上意味着
  • Java websocket 客户端不适用于 GDAX 沙箱环境

    我正在使用 spring WebSocketWebSocketClient连接 GDAX 服务器 它在实时环境中运行良好 但相同的代码不适用于沙箱环境 这是我连接到服务器的代码 public class Test public static
  • 如何在 Cucumber-JVM 中并行运行场景? [复制]

    这个问题在这里已经有答案了 我有一组为 Cucumber JVM 编写的验收测试 为了减少反馈时间 我想并行运行 功能的 场景 我该如何以最简单 最方便的方式做到这一点 我希望能够在 Java 代码中表达这一点 作为常规的 JUnit 测试
  • 是否可以在两个 Android 设备之间直接将数据传输给同一网络中的其他用户?

    假设我有两个 Android 移动设备 连接到同一个无线网络 并且该网络没有外部 互联网访问权限 在没有第三方软件的情况下 是否可以在不知道对方ip 不创建热点的情况下通过wifi传输数据 就像我们在 Windows 上所做的那样 如果 2
  • 为什么我不能在 Java 8 lambda 表达式中引发异常? [复制]

    这个问题在这里已经有答案了 我升级到 Java 8 并尝试用新的 lamdba 表达式替换通过 Map 的简单迭代 该循环搜索空值 如果找到则抛出异常 旧的 Java 7 代码如下所示 for Map Entry
  • 尝试使用平板电脑下载时,我的 Android 应用程序出现设备不受支持的情况

    我在市场上有一个名为的 Android 应用程序D Bitly http bit ly mz6DIB我有一个平板电脑用户尝试下载它 但收到 设备不受支持 我仔细检查了市场设置 它说支持所有设备 我已经进行了快速谷歌搜索 但没有想到任何东西
  • 绘制java类的依赖关系图

    嘿嘿 我正在寻找像 JDepend 这样的工具来为 java 类文件绘制图表 JDepend 看起来很好 但它没有从 deps 中解析 deps 也许我只是缺少一些特殊选项 直接输出为 dot 格式或图像会很好 谢谢 你可以试试Java依赖
  • Minecraft Forge 1.8 - 加载块纹理

    我刚刚开始学习 Java 同时修改 Minecraft 我看过有关使用 Minecraft Forge API 将块添加到游戏中的教程 但我遇到了问题 不再有 setBlockTextureName 方法 所以我不知道该怎么办 我在游戏中添
  • 数独回溯 无效数独

    我创建了一个数独回溯求解器 它工作得很好 但现在如果数独无法解决 我想给出一个错误 因为它无效 例如 如果给出这个数独 http img5 imageshack us img5 2241 sudokugq jpg http img5 ima
  • 正则表达式匹配引号外的文本等

    1 我想出了这个正则表达式来匹配所有引用的字符串 看起来效果很好 问题是如何匹配不在引号内的文本 不知怎的 逆负负 我阅读了文档并 1 不起作用 嗯 如果第一个正则表达式有效 我将使用它从输入字符串中删除所有带引号的字符串 然后 您将剩下的
  • For 循环有效,但 For Each 无效。为什么?

    在包含 forEach 循环的行上抛出了越界异常 但据我所知 这段代码没有任何问题 for 循环从 char 数组的元素 0 开始并循环直到到达最后一个元素 但是当我使用更长的 for 循环尝试此代码时 即 for int i 0 i lt
  • Jsoup 解析和嵌套标签

    我正在学习 Jsoup 并有这个 HTML p Content p p Content p p Content p 我使用 Jsoup parse 和文档 select p 来捕获 内容 并且效果很好 但 p Content p p Con
  • 在自己的构造函数中调用 thread.start() [重复]

    这个问题在这里已经有答案了 线程在自己的构造函数中调用 this start 是否合法 如果是的话 这会导致什么潜在问题 我知道在构造函数运行完成之前该对象不会完全初始化 但除此之外还有其他问题吗 出于内存安全的原因 您不应从其构造函数内向
  • 区分大小写的文件系统上的 File.equals

    我有一个字符串形式的文件路径 在 Java 中 我需要确定文件系统上是否存在该文件 并且我们的代码需要跨平台 因为它在 Windows Linux 和 OS X 上运行 问题是文件路径和文件本身的大小写可能不匹配 即使它们确实代表相同的文件
  • 正则表达式拆分 key=value

    我有一个像这样的字符串 KEY1 Value1 KE Y2 V LUE2A Value2B Key3 KEY4 V AL UE4 KEY5 Value5 我需要将其拆分以获得带有键值对的 Map 值在 应作为单个值传递 KE Y2是一个关键

随机推荐

  • Vuforia 官方Demo讲解

    官方原文地址 https library vuforia com articles Solution Native Sample Application Template 今天看到的36氪新闻 高通发布面向VR AR一体机的骁龙XR1芯片
  • MySQL的自定义排序函数 FIELD(str,str1,str2,str3,...)

    FIELD是mysql的自定义排序函数 ORDER BY FIELD str str1 str2 str3 说明 str是字段 str1 str2 是自定义排序的值 举例说明 以上两幅图就看懂FIELD 的用法了吧
  • Vue——get调用后端接口并将数据回显到table中

    get调用 呈现效果 动态获取后台数据 1 HTML lt template gt
  • vue —— 项目启动时无法识别es6的扩展语法

    启动项目报错 解决 ES6的拓展运算符报错 1 切换淘宝镜像 npm install g cnpm registry http registry npm taobao org cnpm install legacy peer deps sa
  • “三项能力超过ChatGPT”,科大讯飞星火大模型现场接受观众挑战,写稿制表PPT通通拿下...

    杨净 发自 合肥量子位 公众号 QbitAI 三项能力超过ChatGPT 1024将整体超过GPT水平 在科大讯飞星火认知大模型发布会现场 董事长刘庆峰拍着胸脯保证 引起现场掌声雷动 而真机演示效果和多场景产品展示直接把观众们看呆 信息量太
  • anaconda pytorch配置

    wvscode配置python编译器时 发现即使在右下角改变编译器版本 任然无法使用anaconda的python 通过在setting中搜索code runner 修改Execution Map中python u中python为anaco
  • JS anonymous:无名函数的使用

    这个无名函数名字是我起的 起这个名字的原因有两条 原因一是在改前端代码的时候发现这个东西 在调试台console用debug调试 会显示一个anonymous 但你发现他是一个函数 原因二是 这个在w3school上也有 在下面连接页面搜索
  • 解决:500 Internal Privoxy Error

    500 Internal Privoxy Error Privoxy encountered an error while processing your request Could not load template file no se
  • 内网穿透 VScodeSHH

    准备 腾讯云服务器 linux xshell xftp frp https github com fatedier frp 服务端为腾讯云服务器 linux 客户端为自己工作站 linux 服务端操作 用xshell登录腾讯云服务器 下载
  • audio标签与video标签的常用属性及方法

    一 常用的css属性 1 src 用于指明video标签需要播放的音频的地址
  • C语言学习之认识exit()函数

    C语言学习之认识exit 函数 在C语言的main函数中我们通常使用return 0 exit 0 表示程序正常退出 exit exit 1 表示程序异常退出 exit 结束当前进程 当前程序 在整个程序中 只要调用 exit 就结束 但在
  • unity下HybridCLR热更新简易框架

    简易打AB包工具 using System Collections using System Collections Generic using UnityEngine using UnityEditor using HybridCLR E
  • servlet的生命周期

    Servlet的生命周期可以分为5个阶段 加载阶段 创建阶段 初始化阶段 处理客户请求 服务 阶段 销毁阶段 1 加载阶段 服务器接收到客户端请求之后首先会通过类加载器使用servlet类对应的文件加载servlet 2 创建阶段 然后we
  • 河海大学计算机esi排名,河海大学材料科学学科进入ESI国际排名前1%

    根据汤森路透基本科学指标数据库 Essential Science Indicators 简称ESI 2018年3月最新公布的数据 河海大学材料科学学科继工程学 环境 生态学 计算机科学之后首次进入ESI国际学科排名全球前1 实现了学校学科
  • 面试算法题:O(nlogn)查询l~r区间内k的个数

    查询用户文章喜好 我们对用户按照它们的注册时间先后来标号 对于一类文章 每个用户都有不同的喜好值 我们会想知道某一段时间内注册的用户 标号相连的一批用户 中 有多少用户对这类文章喜好值为k 因为一些特殊的原因 不会出现一个查询的用户区间完全
  • 小程序/js/uni订单金额播放

    之前发现直接播放会自动中断 所以纠结了半天 先说思路 首先金额转成字符串 然后截取 得到两段数组 然后遍历 前段需要追加单位 后段小数点后 之后得到需要播放的音频数组 在每段播放完进行完后播放下一段 语音包有点问题就不放了 还是看代码吧 d
  • Chrome浏览器命令行启动参数

    Chrome浏览器命令行启动参数 http blog csdn net qq 32786873 article details 70173265 http blog csdn net u012593626 article details 4
  • Markdown 基本语法

    Markdown 基本语法 初级 一 什么是Markdown Markdown 是一种轻量级标记语言 它允许人们使用易读易写的纯文本格式编写文档 将格式元素添加到纯文本文档 Markdown 允许您使用易于阅读 易于编写的纯文本格式进行编写
  • [运营专题]零预算引爆个人和企业品牌

    文章推荐 Selenium 自动化测试从零实战 原文链接 原来这样做 才能向架构师靠近 原文链接 Cordova App 打包全揭秘 原文链接 TensorFlow on Android 物体识别 原文链接 TensorFlow on An
  • File 类和 InputStream, OutputStream 的用法总结

    目录 一 File 类 1 File类属性 2 构造方法 3 普通方法 二 InputStream 1 方法 2 FileInputStream 三 OutputStream 1 方法 2 FileOutputStream 四 针对字符流对