第十五章:输入输出流I/O

news2024/11/18 5:32:39


15.1:输入/输出流

文件类:File

字节流:InputStream:入 OutputStream:出

字符流:Reader:入 Writer:出

15.1.1 输入流

InputStream类是字节输入流的抽象类,所有字节流的父类。该类中所有方法遇到错误会引发IOException异常。

该类中有一些方法

read()

read(byte[] b)

mark(int readlimit)

reset()

skip()

15.1.2 输出流

15.2 File类

操作:创建或者删除

状态:文件是否存在或者隐藏

创建文件对象

new File(String Pathnname)

File file = new File(“d:/1.txt”)

new File(String parent,String child)

new  File(File parent,String child) 

15.2.1:文件的创建与删除

package fifteenth;
 
import java.io.File;
 
public class FileTest {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File file = new File("D:\\word.text");//创建文件对象
        if(file.exists()) {//exists:存在
            file.delete();//如果该文件存在
            System.out.println("文件已删除");//将该文件删除
            
        }else {//如果文件不存在
            try {
                file.createNewFile();//try语句捕捉可能出现的异常
                System.out.println("文件已创建");//创建该文件
                
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }
 
}
//例题15.1

15.2.2:获取文件信息

package fifteenth;
 
import java.io.File;
 
public class FileTest {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File file = new File("D:\\word.text");//创建文件对象,两个斜杠是转义字符
        if(file.exists()) {//exists:存在
            String name = file.getName();//获取文件名称
            long length = file.length();//获取文件长度
            boolean hidden = file.isHidden();//判断文件是否隐藏
            file.delete();//如果该文件存在
            System.out.println("文件已删除");//将该文件删除
            System.out.println("文件名称:"+name);
            System.out.println("文件长度是:"+length);
            System.out.println("该文件是隐藏文件吗?"+hidden);
            
        }else {//如果文件不存在
            try {
                file.createNewFile();//try语句捕捉可能出现的异常:各种问题,处理或者抛出
                System.out.println("文件已创建");//创建该文件
                
            }catch(Exception e){
                e.printStackTrace();
            }
            System.out.println("该文件不存在");
        }
    }
 
}
//例题15.2

递归算法

package fifteenth;
 
import java.io.File;
 
public class File1 {
    public static void main(String[] args) {
        
        File file = new File("D:\\xinli");
        printAllFiles(file);
                
    }
//在方法里再次调用方法,递归算法
    private static void printAllFiles(File file) {
        // TODO Auto-generated method stub
        File[] files = file.listFiles();
        for( File f: files) {
            if(f.isDirectory()){
                printAllFiles(f);
            }else {
                System.out.println(f.getName());
            }
        }
        
    }
}

文件夹加持代码效果

15.3:文件输入/输出流

15.3.1:FileInputStream与FileOutputStream(字节流)

package fifteenth;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
 
public class FileSteamDemo { // 创建类
    public static void main(String[] args) { // 主方法
        File file = new File("D:\\word.txt"); // 创建文件对象
        try { // 捕捉异常
            FileOutputStream out = new FileOutputStream(file); // 创建FileOutputStream对象
            byte buy[] = "我有一只小毛驴,我从来也不骑。".getBytes(); // 创建byte型数组
            out.write(buy); // 将数组中的信息写入到文件中
            out.close(); // 将流关闭
        } catch (Exception e) { // catch语句处理异常信息
            e.printStackTrace(); // 输出异常信息
        }
        try {
            // 创建FileInputStream类对象
            FileInputStream in = new FileInputStream(file);
            byte byt[] = new byte[1024]; // 创建byte数组
            int len = in.read(byt); // 从文件中读取信息
            System.out.println("文件中的信息是:" + new String(byt, 0, len));// 将文件中的信息输出
            in.close(); // 关闭流
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
//例题15.3

package fifteenth;
 
 
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
 
public class FileReaderDemo {
    public static void main(String[] args) {
        File file = new File("D:\\word.txt"); // 创建文件对象
        try { 
            FileWriter fw = new FileWriter(file); // 创建字符输出流
            String word = "明月几时有,把酒问青天。"; // 写入的字符串
            fw.write(word); // 将字符串写入到文件中
            fw.close(); // 关闭流
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            FileReader fr = new FileReader(file);// 创建字符输入流
            char ch[] = new char[1024]; // 缓存字符数组
            int len = fr.read(ch); // 将文件中的字符读入到缓存数组中
            System.out.println("文件中的信息是:" + new String(ch, 0, len));// 将字符转为字符串输出
            fr.close(); // 关闭流
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}//例题15.4

FileOutputStream

package fifteenth;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;//导入需要的类
 
public class FileStreamDemo {
    //写入文件内容,读出来内容
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\word.txt");//获取文件
        FileOutputStream out = new FileOutputStream(file);//对于程序来说是输出
        byte[] by = "hello world".getBytes();//创建byte类型的字节类型数组,输入想要的文字或字符
        out.write(by);//调用方法,输入
        out.close();//关闭输出流,不然会一直占用空间
                
        // TODO Auto-generated method stub
 
    }
 
}

此代码在控制台不会显示

在文件内显示

FileInputStream 

package fifteenth;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;//导入需要的类
 
public class FileStreamDemo {
    //写入文件内容,读出来内容
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\word.txt");//获取文件
        //字节流输出,在文件内显示
        FileOutputStream out = new FileOutputStream(file);//对于程序来说是输出
        byte[] by = "hello world".getBytes();//创建byte类型的字节类型数组,输入想要的文字或字符
        out.write(by);//调用方法,输入
        out.close();//关闭输出流,不然会一直占用空间
        //字节流输入,在控制台显示
        FileInputStream in = new FileInputStream(file);
        byte[] by1 = new byte[1024];//1024字节太长,解决方法是指定长度读取并打印
        int len  =    in.read(by1);
        System.out.print(new String(by1,0,len));//0和len指代从0号位置开始读取到len位置结束
        in.close();//关闭
 
    }
 
}

15.3.2:FileReader和FileWriter

 FileReader

package fifteenth;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
 
public class FileReaderDemo {
 
    public static void main(String[] args) throws Exception {
        // FileWriter输出 和 输入
        File file = new File("D:\\word.txt");//获取文件
        //字符流输出,在文件内显示
        FileWriter writer = new FileWriter(file);//对于程序来说是输出
        char[] ch = new char [] {'z','h'};//创建char类型的字节类型数组,输入想要的文字或字符
        writer.write(ch);//调用方法,输入
        writer.close();//关闭输出流,不然会一直占用空间
        //字符流输入,在控制台显示
        FileReader reader = new FileReader(file);
        char[] ch1 = new char[1024];//1024字节太长,解决方法是指定长度读取并打印
        int len  =    reader.read(ch1);//读出
        System.out.print(new String(ch1,0,len));//0和len指代从0号位置开始读取到len位置结束
        reader.close();//关闭
 
    }
 
}

FileWriter

package fifteenth;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
 
public class FileReaderDemo {
 
    public static void main(String[] args) throws Exception {
        // FileWriter输出 和 输入
        File file = new File("D:\\word.txt");//获取文件
        //字符流输出,在文件内显示
        FileWriter writer = new FileWriter(file);//对于程序来说是输出
        char[] ch = new char [] {'z','h'};//创建char类型的字节类型数组,输入想要的文字或字符
        writer.write(ch);//调用方法,输入
        writer.close();//关闭输出流,不然会一直占用空间
        //字符流输入,在控制台显示
        FileReader reader = new FileReader(file);
        char[] ch1 = new char[1024];//1024字节太长,解决方法是指定长度读取并打印
        int len  =    reader.read(ch1);//读出
        System.out.print(new String(ch1,0,len));//0和len指代从0号位置开始读取到len位置结束
        reader.close();//关闭
 
    }
 
}

15.4:带缓存的输入/输出流

普通流转换为带缓存的流

15.4.1 BufferedInputStream和BufferedOutStream

15.4.2:BufferedWriter和BufferedReader

package fifteenth;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
 
public class BufferedDemo {
    public static void main(String args[]) {
        String content[] = { "好久不见", "最近好吗", "常联系" };// 写入的内容
        File file = new File("D:\\word.txt"); // 创建文件对象
        try {
            FileWriter fw = new FileWriter(file); // 文件字符输出流
            BufferedWriter bw = new BufferedWriter(fw); // 换成输出流
            for (int k = 0; k < content.length; k++) { // 遍历要输入的内容
                bw.write(content[k]); // 写入字符串
                bw.newLine(); // 写入一个换行符
            }
            bw.close(); // 关闭缓冲输出流
            fw.close(); // 关闭文件字符输出流
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            FileReader fr = new FileReader(file); // 文件字符输入流
            BufferedReader br = new BufferedReader(fr);// 缓冲输入流
            String tmp = null; // 作为缓冲的临时字符串
            int i = 1; // 行数
            // 从文件中读出一行,如果读出的内容不为null,则进入循环
            while ((tmp = br.readLine()) != null) {
                System.out.println("第" + i + "行:" + tmp); // 输出读取的内容
                i++; // 行数递增
            }
            br.close(); // 关闭缓冲输入流
            fr.close(); // 关闭文件字符输入流
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}//例题15.5

//普通流

FileWriter writer = new FileWriter(file);

writer.write("门前大桥下,游过一群鸭");//调用方法,输入

writer.write("快来快来数一数,二四六七八");

writer.write("咕嘎咕嘎,真呀真多呀");

writer.write("数不清到底多少鸭");

//带缓存的流

BufferedWriter bw = new BufferedWriter(writer);

bw.write("门前大桥下,游过一群鸭");//调用方法,输入

bw.newLine();

bw.write("快来快来数一数,二四六七八");

bw.newLine();

bw.write("咕嘎咕嘎,真呀真多呀");

bw.newLine();

bw.write("数不清到底多少鸭");

bw.close();

缓存代码输出

package fifteenth;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
 
public class FileReaderDemo {
 
    public static void main(String[] args) throws Exception {
        // FileWriter输出 和 输入
        File file = new File("D:\\word.txt");//获取文件
        //缓存输出,在文件内显示
        FileWriter writer = new FileWriter(file);//对于程序来说是输出
        //缓存写入,将普通流转换为待缓存的流,进行换行操作
        BufferedWriter bw = new BufferedWriter(writer);//传入普通流
        //char[] ch = new char [] {'z','h'};创建char类型的字节类型数组,输入想要的文字或字符
    //可以传入字符串
        bw.write("门前大桥下,游过一群鸭");//调用方法,输入
        bw.newLine();
        bw.write("快来快来数一数,二四六七八");
        bw.newLine();
        bw.write("咕嘎咕嘎,真呀真多呀");
        bw.newLine();
        bw.write("数不清到底多少鸭");
        bw.close();
        writer.close();//关闭输出流,不然会一直占用空间
        //缓存输入,在控制台显示
    FileReader reader = new FileReader(file);
    BufferedReader br = new BufferedReader(reader);
      String s1  =    br.readLine();
      System.out.println("第一行:"+s1);
      System.out.println("第二行:"+br.readLine());
      System.out.println("第三行:"+br.readLine());
      System.out.println("第四行:"+br.readLine());
        reader.close();//关闭
 
    }
 
}

15.5:数据输入/输出流

package fifteenth;
 
    import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
 
    public class DataStreamDemo {
        public static void main(String[] args) throws IOException {
            //输入文件里面
    File file = new File("D:\\word.txt");
    FileOutputStream isr = new FileOutputStream("gbk"); 
    DataOutputStream zhw = new DataOutputStream(isr);
    FileOutputStream fos = new FileOutputStream(file);//先拿到普通字节流,传入参数告诉他往哪里输出
    DataOutputStream dos = new DataOutputStream(fos);//转化数据流
    dos.writeBoolean(false);
    dos.writeUTF("你好世界");//好处是规定类型,text编码集相同就可以显示
    dos.writeDouble(88.88);//坏处无法看懂,存入是可以的
    dos.close();
    fos.close();//乱码
    isr.close();
    zhw.close();
    //输出控制台里面
    FileInputStream fis = new FileInputStream(file);
    DataInputStream dis = new DataInputStream(fis);
    System.out.println(dis.readBoolean());
    System.out.println(dis.readUTF());//utf可以读出
    System.out.println(dis.readDouble());//read方法无法读出chars
    dis.close();
    fis.close();
    }
 
}

在此次代码内,代码具有两面性,如果txt文本的编码集和utf编码集适配,就会被写入文件

package fifteenth;
 
import java.io.*;
 
public class DateSteamDemo {
    public static void main(String[] args) {
        File file = new File("D:\\word.txt");
        try {
            // 创建FileOutputStream对象,指定要向其中写入数据的文件
            FileOutputStream fos = new FileOutputStream(file);
            // 创建DataOutputStream对象,用来向文件中写入数据
            DataOutputStream dos = new DataOutputStream(fos);
            dos.writeUTF("使用writeUTF()方法写入数据"); // 将字符串写入文件
            dos.writeDouble(19.8); // 将double数据写入文件
            dos.writeInt(298); // 将int数据写入文件
            dos.writeBoolean(true); // 将boolean数据写入文件
            dos.close();
            fos.close();
 
            // 创建FileInputStream对象,指定要从中读取数据的文件
            FileInputStream fis = new FileInputStream(file);
            // 创建DataInputStream对象,用来从文件中读取文件
            DataInputStream dis = new DataInputStream(fis);
            // 读取字符串
            System.out.println("readUTF方法读取数据:" + dis.readUTF());
            // 读取double数据
            System.out.println("readDouble方法读取数据:" + dis.readDouble());
            // 读取int数据
            System.out.println("readInt方法读取数据:" + dis.readInt());
            // 读取boolean数据
            System.out.println("readBoolean方法读取数据:" + dis.readBoolean());
            dis.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
//例题15.6


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1115516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu终端命令行下如何使用NetworkManager(netplan)来配置wifi网络

最近在给家里折腾一个文件共享服务器给家里的小米摄像头保存监控视频用。树莓派太贵了&#xff0c;找来找去发现香橙派orangepi zero3 是最低成本的替代解决方案&#xff08;网络足够快&#xff0c;CPU的IO能力足够强&#xff09;&#xff0c;香橙派orangepi zero3的操作系统是…

《C语言图形界面-系统开发》专栏介绍 专栏目录

《C语言图形界面-系统开发》介绍及目录 基本介绍 本项目是一个基于EasyX图形库的C语言图书管理系统。 界面优美高级代码结构设计合理注释详尽清晰 本专栏是一个详尽到完全贴近C语言初学者的教程&#xff0c;完整代码 配套教程&#xff0c;完全不用担心学不会的问题。 项目展…

FPGA的通用FIFO设计verilog,1024*8bit仿真,源码和视频

名称&#xff1a;FIFO存储器设计1024*8bit 软件&#xff1a;Quartus 语言&#xff1a;Verilog 本代码为FIFO通用代码&#xff0c;其他深度和位宽可简单修改以下参数得到 reg [7:0] ram [1023:0];//RAM。深度1024&#xff0c;宽度8 代码功能&#xff1a; 设计一个基于FPGA…

EDUSRC--简单打穿某985之旅

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

AN动画基础——父子级关系

【AN动画基础——父子级关系】 父子级关系基础动画实战&#xff0c;行星的自转与公转 本篇内容&#xff1a;了解父子级关系 重点内容&#xff1a;父子级关系做动画 工 具&#xff1a;Adobe Animate 2022 父子级关系 在动画中&#xff0c;父子级关系通常用于控制对象之间的层次…

盘点数据采集中14种常见的反爬策略

引言 随着互联网的飞速发展, 爬虫技术不断演进, 为数据获取和信息处理提供了强大支持。然而, 滥用爬虫和恶意爬取数据的行为日益增多, 引发了反爬虫技术的兴起。在这场看似永无止境的 技术较量 中, 爬虫与反爬虫技术相互博弈、角力。本文将简单过下目前已知的几种反爬策略, 旨…

10.16课上,煎饼排序(选择排序实现),冒泡排序,快速排序

煎饼排序 第一步找剩余数组里的最大值&#xff0c;然后从头到这里翻转一次&#xff0c;这样最大值就到了开头&#xff0c;再把开头从当前结尾翻转一次&#xff0c;就把当前的最大值翻转到了最后 class Solution { public:vector<int> pancakeSort(vector<int>&am…

LCR 177. 撞色搭配

LCR 177. 撞色搭配 LCR 177. 撞色搭配 迷你游戏之寻找两个单身狗 int* sockCollocation(int* sockets, int socketsSize, int* returnSize) {int* arr (int*)malloc(2 * sizeof(int));int ret 0;for (int i 0; i < socketsSize; i){ret ^ sockets[i];}int pos 0;for…

软考系列(系统架构师)- 2018年系统架构师软考案例分析考点

试题一 软件架构&#xff08;非功能性需求、C/S 架构&#xff09; 【问题1】&#xff08;8分&#xff09; 在系统架构设计中&#xff0c;决定系统架构设计的非功能性需求主要有四类&#xff1a;操作性需求、性能需求、安全性需求和文化需求。请简要说明四类需求的含义。 (1) …

正点原子嵌入式linux驱动开发——Linux中断

不管是单片机裸机实验还是Linux下的驱动实验&#xff0c;中断都是频繁使用的功能&#xff0c;在裸机中使用中断需要做一大堆的工作&#xff0c;比如配置寄存器&#xff0c;使能IRQ等等。但是Linux内核提供了完善的中断框架&#xff0c;只需要申请中断&#xff0c;然后注册中断处…

C进阶-语言文件操作

本章重点&#xff1a; 什么是文件 文件名 文件类型 文件缓冲区 文件指针 文件的打开和关闭文件的顺序读写文件的随机读写文件结束的判定 1. 什么是文件 磁盘上的文件是文件。 但是在程序设计中&#xff0c;我们一般谈的文件有两种&#xff1a;程序文件、数据文件 1.1 程序文件…

R语言中fread怎么使用?

R语言中 fread 怎么用&#xff1f; 今天分享的笔记内容是数据读取神器fread&#xff0c;速度嘎嘎快。在R语言中&#xff0c;fread函数是data.table包中的一个功能强大的数据读取函数&#xff0c;可以用于快速读取大型数据文件&#xff0c;它比基本的read.table和read.csv函数更…

吴恩达开新课了:面向所有人的生成式 AI 课程!我已偷偷学了起来

作者 | 智商掉了一地 斯坦福大学的吴恩达教授可能是许多人接触 AI 的启蒙课导师吧&#xff0c;在过去的十多年中&#xff0c;他的《Machine Learning》课程已经对数百万的学习者产生了积极影响。 ▲image.png 而随着 ChatGPT 的推出&#xff0c;大模型和各类生成式人工智能&am…

你知道谁是计算机之父吗?

“计算机之父” 这个词通常用来指代计算机科学领域的杰出人物&#xff0c;他们在计算机科学和技术的发展中发挥了重要作用。有多位人物被认为是计算机之父&#xff0c;其中包括&#xff1a; 查尔斯巴贝奇&#xff08;Charles Babbage&#xff09;&#xff1a;是英国的一位杰出的…

Node.js的安装

直接在浏览器中搜索Node.js即可 打开下载好的文件 验证是否安装成功 在cmd中输入 node -v&#xff0c;若结果为版本号那就是成功的 环境配置 配置全局模块所在的路径缓存cache的路径 在安装目录中新建两个文件夹&#xff0c;文件夹名为:node_cache和node_global 输…

STARKs with small finite field:小域带来的迷人性能

1. 引言 前序博客有&#xff1a; 2023年 ZK Hack以及ZK Summit 亮点记为何需关注各ZKP方案的benchmarks&#xff1f; 很久以前&#xff0c;有大量研究和开发致力于改进ZKP性能。研究人员通过采用多种不同的技术&#xff0c;包括但不限于&#xff1a; 不同的IOPs不同的多项式…

【Java 进阶篇】深入了解 Bootstrap 按钮和图标

按钮和图标在网页设计中扮演着重要的角色&#xff0c;它们是用户与网站或应用程序交互的关键元素之一。Bootstrap 是一个流行的前端框架&#xff0c;提供了丰富的按钮样式和图标库&#xff0c;使开发者能够轻松创建吸引人的界面。在本文中&#xff0c;我们将深入探讨 Bootstrap…

c++入门(命名空间, c++输入输出, 缺省参数)

文章目录 1. 命名空间正确的命名定义命名空间的使用 2. c输入与输出标准输入输出对象向流写入 读取数据 3. 缺省参数缺省参数分类缺省参数声明缺省参数初始值 c的简单介绍 C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大…

全波形反演培训的思考与总结

一. InversionNet 最简单的端到端DL_FWI 1. 网络结构&#xff1a; 图1 构建了一个具有编码器-解码器结构的卷积神经网络&#xff0c;根据地震波动数据模拟地下速度结构。编码器主要由卷积层构建&#xff0c;它从输入地震数据中提取高级特征并将其压缩为单个高维向量。解码器然后…