文件输入输出流

简介: 文件输入输出流

输入输出流 内容概括:

存在java.io包中

所有输入流都是抽象类InputStream(字节输入流)和抽象类Reader(字符输入流)的子类。

所有输出流都是抽象类OutputStream(字节输出流)和抽象类Writer(字符输出流)的子类。

File类 不涉及对文件的读写操作,只获取文件信息,如文件所在目录、文件长度、文件读写权限等。

创建一个File对象的构造方法有:

File(String filename); File(String directoryPath, String filename); File(File dir , String filename); //dir是一个目录 几个常用方法:
文件属性 public String getName() //获取文件名 public boolean canRead() //是否可读 public boolean exists() //是否存在 public String getAbsolutePath() //获取文件绝对路径 public String getParent() //获得父目录 public boolean isFile() //判断是否是文件 Txt.java package com.InOut;
import java.io.*;
public class Txt { public static void main(String[] args) { File f = new File("E:\", "hello.txt");  //文件需事先创建 System.out.println(f.getName() + "是可读的吗:" + f.canRead()); System.out.println(f.getName() + "的长度:" + f.length()); System.out.println(f.getName() + "的绝对路径:" + f.getAbsolutePath());
File file = new File("new.txt");
    System.out.println("在当前目录下创建新文件" + file.getName());
    if (!file.exists()) {
        try {
            file.createNewFile();
            System.out.println("创建成功");
        } catch (IOException exp) {
        }
    }
}
复制代码

} hello.txt是可读的吗:true hello.txt的长度:24 hello.txt的绝对路径:E:\hello.txt 在当前目录下创建新文件new.txt 创建目录 public boolean mkdir(); 列出目录中的文件

public String[] list(); //
public File [] listFiles(); //
public String[] list(FilenameFilter obj) //以字符串形式返回目录下指定类型的所有文件
public File [] listFiles(FilenameFilter obj) //用File对象形式返回
FilenameFilter是一个接口,该接口有一个方法:
public boolean accept(File dir,String name);
Directory.java package com.InOut; import java.io.*;
class FileAccept implements FilenameFilter{ private String extendName; public void setExtendName(String s){ extendName = "."+s; } public boolean accept(File dir,String name){ //重写接口中的方法 return name.endsWith(extendName); } }
public class Directory { public static void main(String[] args) { File dirFile = new File(".");  //参数点号表示当前目录 FileAccept fileAccept = new FileAccept(); fileAccept.setExtendName("txt"); String fileName[] = dirFile.list(fileAccept);//以字符串形式返回,参数为接口回调 for(String name:fileName){ System.out.println(name); } } }

new.txt 文件的创建与删除 先创建对象:File file = new File("E:",mary.txt);

如果没有名为mary.txt的文件,调用public bolean createNewFile();创建

file.delete();删除文件

运行可执行文件 可以用Runtime类,此时将使用静态方法创建对象:

Runtime ec = Runtime.getRuntime();
Exe.java package com.InOut; import java.io.*;
//打开记事本和Typora public class Exe { public static void main(String[] args) { try { Runtime ce = Runtime.getRuntime(); File file = new File("c:/windows", "Notepad.exe"); ce.exec(file.getAbsolutePath()); file = new File("E:\User\Soft\Typora\Typora.exe"); ce.exec(file.getAbsolutePath()); } catch (Exception e) { System.out.println(e); } } }

文件字节输入流 四个基本步骤: 设定输入流的源 创建指向源的输入流 让输入流读取源中的数据 关闭输入流 如果需求简单,可使用InputStream的子类FileInputStream。

构造方法 FileInputStream(String name);

FileInputStream(File file);

参数name和file指定的文件就称为输入流的源。通常要配合try catch使用

关闭流 close();

InStream.java package com.InOut; import java.io.*;
//使用文件字节流读文件的内容 public class InStream { public static void main(String[] args) { int n=-1; byte [] a =new byte[100]; try{ File f = new File("hello.txt"); System.out.println("is file exists:"+f.exists()); InputStream in = new FileInputStream(f); while((n=in.read(a,0,100))!=-1){ String s = new String(a,0,n); System.out.println(s); } in.close(); } catch(IOException e){ System.out.println("File read error"+e); } } }

is file exists:true Hello, this is my world. 你好,这是我的世界。 文件字节输出流 同文件字节输入流类似

文件字符输入、输出流 上面的文件字节输入流、输出流的read write方法不能很好操作Unicode字符,例如汉字可能会出现乱码现象。

FileReader 和 FileWriter分别是Reader 和 Writer的子类。

CharInOut.java package com.InOut; import java.io.*;
public class CharInOut { public static void main(String[] args) { File sourceFile = new File("hello.txt"); File targetFile = new File("hello_1.txt"); //不必事先创建 char c[] = new char[19]; try{ Writer out = new FileWriter(targetFile,true); Reader in = new FileReader(sourceFile); int n = -1; while((n=in.read(c))!=-1){ out.write(c,0,n); } out.flush(); out.close(); } catch(IOException e){ System.out.println("Error"+e); } } }

缓冲流 如果把文件字符输入流作为BufferedReader流的源,把文件字符输出流作为BufferedWriter流的目的地,则将具有更强的读写能力,例如按行读取等。

核心语句:String strLine = inTwo.readLine();

//inTwo是一个BufferedReader对象,但是参数里是文件输入流的源。

随机流 RandomAccessFile类,既不是InputStream,也不是OutStream的子类。

由RandomAccessFile类创建的流称为随机流,既可作为流的源,也可作为流的目的地。

构造方法

RandomAccessFile(String name, String mod)
RandomAccessFile(File file, String mod) //参数mod为 r 或 rw
方法 seek(long a) 参数a确定读写位置距离文件开头的字节个数

getFilePointer() 获取流的当前读写位置

read Char( )

writeFloat( )

数组流 字节数组流

相关文章
|
Linux
亚马逊云服务器AWS安装CentOS
亚马逊云服务器默认创建的实例,在停止之后再启动的情况下,IP会发生改变。所以我们最好先创建一个弹性IP,即EIP,不过我也不清楚这个费用。 1、按如图操作创建一个弹性IP,弹性IP创建之后可以随便绑定到该region下的实例 2、创建好弹性IP之后,然后去创建实例: 3、点启动实例之...
3716 0
|
机器学习/深度学习 数据可视化 算法
深度学习之梯度下降参数可视化
深度学习之梯度下降参数可视化
|
监控 供应链 前端开发
浏览器拨测:将网站护航的阵地再前推一米
近年来,针对网站的攻击形式愈发多样,手段也变得更加隐蔽,使用浏览器拨测来监控服务的整个生命周期有助于及时发现攻击,保护核心业务链路不受损。阿里云监控浏览器拨测使用真实的浏览器进行拨测,通过提供丰富的断言能力和脚本录制能力护航服务的全生命周期和核心业务链路,助力开发者更好地监控服务的可用性,消除潜在风险。
593 129
浏览器拨测:将网站护航的阵地再前推一米
|
机器学习/深度学习 人工智能 开发者
GPT-4o-mini-transcribe:OpenAI 推出实时语音秒转文本模型!高性价比每分钟0.003美元
GPT-4o-mini-transcribe 是 OpenAI 推出的语音转文本模型,基于 GPT-4o-mini 架构,采用知识蒸馏技术,适合在资源受限的设备上运行,具有高效、实时和高性价比的特点。
845 2
GPT-4o-mini-transcribe:OpenAI 推出实时语音秒转文本模型!高性价比每分钟0.003美元
|
前端开发 JavaScript API
React 文件下载组件:File Download
本文详细介绍了如何在React应用中实现文件下载组件,包括基本概念、实现步骤和代码示例。同时,探讨了常见问题如文件类型不匹配、文件名乱码等及其解决方法,旨在提升用户体验和代码可维护性。
938 2
|
存储 人工智能 编解码
在Data-Driven时代下,如何打造下一代智能数据体系?
本文源自2024外滩大会“Data+AI”论坛,由蚂蚁集团数据平台与服务部负责人骆骥演讲整理。文章回顾了数据技术发展历程,指出生成式AI正推动数据技术从成本效率中心向价值中心转变。
|
前端开发 JavaScript API
探索HTML中的元素关系:父元素、子元素、祖先元素与后代元素
探索HTML中的元素关系:父元素、子元素、祖先元素与后代元素
1084 4
|
人工智能 JavaScript API
suno-api
suno-api
1261 1
|
缓存 算法 BI
【天衍系列 02】深入理解Flink的FileSink 组件:实时流数据持久化与批量写入
【天衍系列 02】深入理解Flink的FileSink 组件:实时流数据持久化与批量写入
727 2
|
NoSQL 数据库连接 数据处理
数据传输DTS迁移问题之全量加增量发到目标库如何解决
数据传输服务(DTS)是一项专注于数据迁移和同步的云服务,在使用过程中可能遇到多种问题,本合集精选常见的DTS数据传输问题及其答疑解惑,以助用户顺利实现数据流转。