Java IO编程(一)

news2024/11/17 22:38:52

目录

1.File类

 2.字节输入输出流(InputStream Outputstream)

3.Writer与Reader字符输入输出流

 4.打印流


1.File类

file类专门用于管理file文件的,比如文件的创建,删除,修改名称等等

以下是File类的常用方法:

方法描述
exists()判断文件或目录是否存在
canRead()判断文件是否可读
canWrite()判断文件是否可写
isFile()判断路径是否表示一个文件
isDirectory()判断路径是否表示一个目录
getName()获取文件或目录的名称
getParent()获取文件或目录的父级路径
getPath()获取文件或目录的路径
isAbsolute()判断路径是否为绝对路径
lastModified()获取文件或目录的最后修改时间
length()获取文件的大小
mkdir()创建目录
mkdirs()创建目录及其父目录
createNewFile()创建新文件
delete()删除文件或目录
renameTo()重命名文件或目录
list()返回目录下的文件和目录列表
listFiles()返回目录下的文件和目录数组
getAbsolutePath()获取文件或目录的绝对路径

 文件路径需要掌握File.separator分隔符相当于"\\",为什么要有这个东西呢?因为在不同的操作系统中路径的分隔符并不一样,由此出现File.separator,会根据自己的系统自动转换相应的分隔符

1.使用案例:在一个路径上,如果存在一个文件java.txt,则将其删除,如果不存在则创建一个文件java.txt,再将其名字改为java.html并且输出上次的修改日期

package Example1605;

import java.io.File;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

public class javaDemo {
    public static void main(String[] args)throws Exception {
        File file = new File("E:"+File.separator+"jiawa"+File.separator+"java.txt");
//        判断文件是否存在
        if (file.exists()){
            file.delete();
        }else {
//            创建文件
            file.createNewFile();
//            实现文件改名
            String newName = file.getName().substring(0,file.getName().lastIndexOf('.'))+".html";
            File newFile = new File(file.getParentFile(),newName);
            file.renameTo(newFile);
//            上次修改日期
            System.out.println(new Date(file.lastModified()));
        }
    }
}

2.通过递归实现输出C盘所有文件内容

package Example1601;

import java.io.File;

public class javaDemo {
    public static void main(String[] args) {
        int count = 0;
       File file =  new File("C:"+ File.separator);
       list(file,count);
        System.out.println(count);
    }
    public static void list(File file,int count){
//        判断是否目录如果是则深入目录
        if (file.isDirectory()){
            File result[] = file.listFiles();
//            判断目录里面是否有内容没有就跳过,有则继续深入
            if (result!=null){
                for (int i=0;i< result.length;i++){
                    list(result[i],count++);
                }
            }
        }
    }
}

 2.字节输入输出流(InputStream Outputstream)

字节输入输出流的最基本单位是byte字节,注意InputStream和OutputStream都是抽象类,所以实例化对象分别是其子类FileInputStream(File file)与FileOutputStream(File file)

首先介绍OutoutStream字节输出流的常用方法:

方法描述
write(byte[] buffer)将byte数组中的数据写入输出流
write(byte[] buffer, int off, int len)将byte数组中指定范围的数据写入输出流
write(int b)将单个字节写入输出流
flush()刷新输出流,确保所有缓冲区中的数据都被写出
close()关闭输出流,并释放相关资源

 InputStream的常用方法:

方法描述
read()读取输入流中的下一个字节
read(byte[] buffer)将输入流中的数据读入到byte数组中
read(byte[] buffer, int off, int len)将输入流中的数据读入到指定范围的byte数组中
skip(long n)跳过并丢弃输入流中的n个字节
available()返回可以从输入流中读取(或跳过)的字节数
close()关闭输入流,并释放相关资源

案例代码:

实现在java.txt中通过OutputStream的wirte函数实现第一次覆盖内容实现输入Hello,第二次实现追加在Hello后面加入World

package Example1603;

import java.io.*;
import java.nio.charset.StandardCharsets;

public class javaDemo {
    public static void main(String[] args)throws Exception {
//        确保路径有效可以对其进行判定此处暂略
        File file =  new File("E:"+File.separator+"jiawa"+File.separator+"java.txt");
//        正常情况下
        OutputStream out = new FileOutputStream(file);
        out.write("Hello".getBytes(StandardCharsets.UTF_8));
        out.close();

//        通过构造方法设置true实现文件内容追加
        OutputStream outer = new FileOutputStream(file,true);
        outer.write("World".getBytes(StandardCharsets.UTF_8));
        outer.close();

//        输出文件内容
        InputStream input = new FileInputStream(file);
        byte[] data = new byte[1024];
        int len =  input.read(data);
        System.out.println(new String(data,0,len));
    }
}

 注意在创建实例化对象执行完函数后都要进行close();除非使用AutoCloseable接口

 案例2:在刚才基础上读取时候跳过Hello

package Example1604;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class javaDemo {
    public static void main(String[] args)throws Exception {
        File file =  new File("E:"+File.separator+"jiawa"+File.separator+"java.txt");
        InputStream input = new FileInputStream(file);
        byte[] data =new byte[1024];
        input.skip(5);
        int len = input.read(data);
        System.out.println(new String(data,0,len));
        input.close();
    }
}

3.Writer与Reader字符输入输出流

1.字符输入流与字节输入流有什么区别:

  1. 数据单位:字节流以字节为单位进行输入和输出,而字符流以字符为单位进行输入和输出。字符流可以直接处理Unicode字符,而字节流需要通过字符编码和解码来处理文本数据。

  2. 编码支持:字符流默认使用平台默认的字符编码(如UTF-8),并提供了更多的字符编码支持(如UTF-16、ISO-8859-1等)。字节流不关心编码,只是原样传输字节数据。

  3. 数据处理:字符流提供了更高级别的数据处理功能,能够方便地读取和写入文本数据,包括按行读取、字符缓冲等操作。字节流主要用于二进制数据的读写,处理相对底层。

  4. 效率:由于字符流需要进行字符编码和解码,所以在处理大量数据时可能会比字节流略慢。对于文本数据的处理,字符流的效率通常比较高。

综上所述,字符流更适合处理文本数据,提供了更多的字符编码支持和便捷的高级功能;而字节流适用于处理二进制数据,更为底层和灵活。选择使用哪种流类型取决于具体的输入/输出需求和数据类型。

2.Writer与Reader也都是抽象类,所以实例化的时候需要向上转型为其子类,FileWriter与FileReader

Writer的常用方法:

方法描述
write(int c)将指定字符写入输出流
write(char[] cbuf)将字符数组的所有字符写入输出流
write(String str)将字符串中的所有字符写入输出流
write(String str, int off, int len)将字符串中指定范围的字符写入输出流
append(CharSequence csq)将指定的字符序列追加到输出流
append(CharSequence csq, int start, int end)将指定范围的字符序列追加到输出流
flush()刷新输出流,将缓冲区的数据写入目标设备
close()关闭输出流,并释放相关资源

 Reader的常用方法:

方法描述
read()读取单个字符,返回读取的字符的ASCII码值或-1(如果已达到流的末尾)
read(char[] cbuf)将字符读入数组,并返回读取的字符数
read(char[] cbuf, int off, int len)将字符读入数组的指定范围,并返回读取的字符数
read(CharBuffer target)将字符读入CharBuffer对象中,并返回读取的字符数
skip(long n)跳过n个字符的读取
ready()判断是否可以读取(准备读取)
mark(int readAheadLimit)在当前位置设置一个标记,以供稍后的reset()方法使用
reset()将位置重置为最近的标记位置
close()关闭输入流,并释放相关资源

案例代码1:

package Example1606;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class javaDemo {
    public static void main(String[] args)throws Exception {
        File file = new File("E:"+File.separator+"jiawa"+File.separator+"java.txt");
        try{
            if (file.exists()){
                Writer out = new FileWriter(file);
                out.write("大家好,我系渣渣辉");
//                Witer的追加是通过函数apend()
                out.append(",其实我不系了啦");
                out.close();
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

 案例代码2:

package Example1607;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class javaDemo {
    public static void main(String[] args) {
        File file =new File("E:"+File.separator+"jiawa"+File.separator+"java.txt");
        try {
            Reader read = new FileReader(file);
            char data[] =new char[1024];
            int len = read.read(data);
            System.out.println(new String(data,0,len));
            read.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}


 4.打印流

虽然说io中对数据的输出可以通过OutputStream与Writer,但是两者都有一定的限制,比如OutputStream只允许输出字节数据,Writer只允许输出字符数据和字符串数据,在实际的开发过程会有多种数据类型的输出

下面介绍PrintWriter的常用方法:

void print(boolean x)将boolean值打印到输出流。
void print(char x)将字符打印到输出流。
void print(int x)将整数打印到输出流。
void print(long x)将长整数打印到输出流。
void print(float x)将浮点数打印到输出流。
void print(double x)将双精度浮点数打印到输出流。
void print(char[] x)将字符数组打印到输出流。
void print(String x)将字符串打印到输出流。
void println()打印一个换行符。
void println(boolean x)打印boolean值,并在结尾添加换行符。
void println(char x)打印字符,并在结尾添加换行符。
void println(int x)打印整数,并在结尾添加换行符。
void println(long x)打印长整数,并在结尾添加换行符。
void println(float x)打印浮点数,并在结尾添加换行符。
void println(double x)打印双精度浮点数,并在结尾添加换行符。
void println(char[] x)打印字符数组,并在结尾添加换行符。
void println(String x)打印字符串,并在结尾添加换行符。
void format(String format, Object... args)使用指定格式将参数写入输出流。
void write(char[] buf, int off, int len)将字符数组的一部分写入输出流。
void flush()刷新输出流,即将缓冲区的内容写入目标设备。
void close()关闭输出流,释放相关资源。

 1.通过打印一个print.txt内容为:

姓名:黄小龙

年龄15

案例代码:

package Example08;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

public class javaDemo {
    public static void main(String[] args) {
        File file =  new File("E:"+File.separator+"jiawa"+File.separator+"print.txt");
        if (!file.exists()){
            try {
                file.createNewFile();
                PrintWriter w = new PrintWriter(new FileOutputStream(file));
                w.println("姓名:黄小龙");
                w.print("年龄");
                w.println(15);
//                释放资源
                w.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
}

 构造方法PrintWriter(File file)与PrintWriter(FileOutputStream out)有什么区别:

`PrintWriter(File file)` 和 `PrintWriter(FileOutputStream out)` 都创建了一个新的 `PrintWriter` 对象,用于写入字符流。它们的区别在于它们的构造函数参数类型不同。

`PrintWriter(File file)` 构造函数接受一个 `File` 对象作为参数,表示要写入的文件。当您使用这个构造函数创建一个 `PrintWriter` 对象时,它将自动为您创建一个 `FileOutputStream` 对象并将其与您指定的文件关联。这意味着您可以直接向 `PrintWriter` 对象写入字符,而不必手动创建 `FileOutputStream` 对象。

例如,以下代码使用 `PrintWriter(File file)` 构造函数创建一个新的 `PrintWriter` 对象,并将其用于向 `example.txt` 文件写入字符:

```java
File file = new File("example.txt");
PrintWriter writer = new PrintWriter(file);
writer.println("Hello, world!");
writer.close();
```

相比之下,`PrintWriter(FileOutputStream out)` 构造函数接受一个 `FileOutputStream` 对象作为参数,表示要与该对象关联的输出流。如果您已经有一个 `FileOutputStream` 对象,并且希望将其用作 `PrintWriter` 对象的输出流,可以使用这个构造函数。

例如,以下代码创建一个新的 `FileOutputStream` 对象,并将其用作 `PrintWriter` 对象的输出流:

```java
FileOutputStream outputStream = new FileOutputStream("example.txt");
PrintWriter writer = new PrintWriter(outputStream);
writer.println("Hello, world!");
writer.close();
```

总之,这两种构造函数都可以用于创建一个 `PrintWriter` 对象,但是它们的参数类型不同,并且在用法上略有不同。

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

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

相关文章

《Opencv入门到项目实战》(一):Opencv安装及图像基本操作

文章目录 0.Opencv介绍及环境配置1.图像读取1.1 彩色图像读取1.2 灰色图像读取 2.视频读取3.ROI读取3.1 图形切片处理3.2 提取颜色通道 4.图像填充5.数值运算与图像融合5.1 加法运算5.2 图像融合 6. 总结 0.Opencv介绍及环境配置 OpenCV是一个强大的计算机视觉库&#xff0c;它…

CS5265 USB-C to HDMI 4k@60Hz单转方案

CS5265AN是一款高性能Type-C/DP1.4至HDMI2.0b转换器芯片&#xff0c;集成了DP1.4兼容接收机和HDMI2.0b兼容发射机&#xff0c;还配备了CC控制器用于CC通信&#xff0c;实现DP Alt模式。DP接口包括4条主通道、辅助通道和HPD信号&#xff0c;接收器支持每通道最大5.4Gbps数据速率…

通过 CCIP 构建跨链应用(5 个案例)

Chainlink 的跨链互操作性协议&#xff08;CCIP&#xff09;是一种新的通用跨链通信协议&#xff0c;为智能合约开发人员提供了以最小化信任的方式在区块链网络之间传输数据和通证的能力。 目前&#xff0c;部署在多个区块链上的应用程序面临着资产、流动性和用户的碎片化问题…

【dfs分解质因数】CF27E

Problem - 27E - Codeforces 题意&#xff1a; 思路&#xff1a; 爆搜分解质因子的模板题&#xff0c;记录一下板子 Code&#xff1a; #include <bits/stdc.h>#define int long longusing namespace std;const int mxn1e610; const int mxe1e610; const int mxv1e610…

跨部门协作,企业图文档管理的协同管理的重要性

随着企业规模的扩大和业务流程的复杂化&#xff0c;图文档管理涉及的部门和人员越来越多&#xff0c;因此跨部门协作成为了必不可少的管理方式。在线图文档管理作为现代企业的数字化解决方案之一&#xff0c;为跨部门协作提供了强大的支持和便利。在线图文档管理在企业图文档管…

什么是图像特征?如何让计算机理解图像特征?

图像的特征 大多数人都玩过拼图游戏。首先拿到完整图像的碎片&#xff0c;然后把这些碎片以正确的方式排列起来从而重建这幅图像。如果把拼图游戏的原理写成计算机程序&#xff0c;那计算机就也会玩拼图游戏了。 在拼图时&#xff0c;我们要寻找一些唯一的特征&#xff0c;这…

React Dva项目 Model中编写与调用异步函数

上文 React Dva项目中模仿网络请求数据方法 中&#xff0c;我们用项目方法模拟了后端请求的数据 那么 今天我们就在models中尝试去使用一下这种异步获取数据的方法 之前 我们在文章 React Dva项目创建Model,并演示数据管理与函数调用 中已经接触过Model了 也可以理解为 它就是 …

火爆全网,Fiddler手机抓包-接口测试辅助实战(最全总结)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Fiddler是一款安装…

【PostgreSQL】系列之 一 用户创建和授权(三)

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的…

新手入门Jenkins自动化部署入门详细教程

1. 背景 在实际开发中&#xff0c;我们经常要一边开发一边测试&#xff0c;当然这里说的测试并不是程序员对自己代码的单元测试&#xff0c;而是同组程序员将代码提交后&#xff0c;由测试人员测试&#xff1b; 或者前后端分离后&#xff0c;经常会修改接口&#xff0c;然后重新…

使用Netty库:关闭或者调整在控制台输出的日志

问题现象 今天使用Netty库&#xff0c;一运行&#xff0c;在控制台输出了很多debug级别的日志&#xff0c;把我主要的输出信息都掩盖了&#xff1a; 程序代码&#xff1a; package com.thb;import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; impor…

[openCV]基于拟合中线的智能车巡线方案V2

import cv2 as cv import os import numpy as np# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir&#xff1a;文件夹根目录输入 ext: 扩展名返回&#xff1a; 文件路径列表"""newDir d…

VMware虚拟机安装Linux教程(超详细)

一、安装 VMware 官方正版VMware下载&#xff08;16 pro&#xff09;&#xff1a;https://www.aliyundrive.com/drive/file/backup/64c9fa3c132e0d42c60d489c99f3f951ef112ad5 下载Linux系统镜像&#xff08;阿里云盘不限速&#xff09;&#xff1a;https://www.aliyundrive.c…

【C#学习笔记】值类型(2)

文章目录 Struct结构体类型为什么不推荐struct 元组类型可为空的值类型从可为空的值类型转换为基础类型提升的运算符如何确定可为空的值类型为什么建议少用T?装箱和取消装箱 Struct结构体类型 结构类型&#xff08;“structure type”或“struct type”&#xff09;是一种可封…

为Stable Diffusion web UI开发自己的插件实战

最近&#xff0c;Stable Diffusion AI绘画受到了广泛的关注和热捧。它的Web UI提供了了一系列强大的功能&#xff0c;其中特别值得一提的是对插件的支持&#xff0c;尤其是Controlnet插件的加持&#xff0c;让它的受欢迎程度不断攀升。那么&#xff0c;如果你有出色的创意&…

【Linux命令200例】touch用来创建新的文件或者修改已有文件

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜…

Linux下.py文件只读问题以及解决过程

一、问题描述 如图&#xff0c;在Ubuntu Linux系统中使用pycharm管理项目文件时&#xff0c;无法编辑&#xff0c;提示文件为只读&#xff1a; 点击"OK"后仍旧无法清除只读模式&#xff0c;并报错&#xff1a; 二、问题解决 将问题定性为文件权限相关问题&#…

谁说配置难?这篇文章让你轻松掌握xilinx 7系列FPGA配置技巧

本文旨在通过讲解不同模式的原理图连接方式&#xff0c;进而配置用到引脚的含义(手册上相关引脚含义有四、五页&#xff0c;通过本文理解基本上能够记住所有引脚含义以及使用场景)&#xff0c;熟悉xilinx 7系列配置流程&#xff0c;以及设计原理图时需要注意的一些事项&#xf…

什么是SaaS?国内做得好的saas平台有哪些啊?

SaaS是Software as a Service的缩写&#xff0c;意为软件即服务。 它是指将软件应用程序部署在云计算服务器上&#xff0c;通过网络提供给用户的一种模式。 这个模式下&#xff0c;用户无需花费大量的资金购买和维护软件应用程序&#xff0c;只需要按需订阅使用。SaaS通常以订…