IO流字符流(FileReader与FileWriter)

目录

FileReader

空参read方法

带参read方法👇

FileWriter

void write(intc)        写出一个字符 

void write(string str)        写出一个字符串 

void write(string str,int off,int len)        写出一个字符串的一部分 

void write(char[] cbuf)        写出一个字符数组

void write(char[] cbuf,int off, int len)        写出字符数组的一部分 

综合练习 

1、拷贝一个文件夹,考虑子文件夹 

2、为了保证文件的安全性,就需要对原始文件进行加密存储,再使用的时候再对其进行解密处理。加密原理:对原始文件中的每一个字节数据进行更改,然后将更改以后的数据存储到新的文件中。解密原理读取加密之后的文件,按照加密的规则反向操作,变成原始文件。 

3、文本文件中有以下的数据:2-1-9-4-7-8将文件中的数据进行排序,变成以下的数据:1-2-4-7-8-9 



FileReader

操作本地文件的字符输入流

创建字符输入流对象👇

public FileReader(File file)                创建字符输入流关联本地文件
public FileReader(string pathname)                创建字符输入流关联本地文件

如果文件不存在,就直接报错。

读取数据👇

public int read()                读取数据,读到未尾返回-1

public int read(char[] buffer)                读取多个数据,读到末尾返回-1

按字节进行读取,遇到中文,一次读多个字节,读取后解码,返回一个整数

读到文件末尾了,read方法返回-1。

释放资源👇

public int close()                释放资源/关流

空参read方法

read():默认也是一个字节一个字节的读取的,如果遇到中文就会一次读取多个

在读取之后,方法的底层还会进行解码并转成十进制。最终把这个十进制作为返回值

package fileReader;

import java.io.FileReader;
import java.io.IOException;

public class FileReaderDemo1 {
    public static void main(String[] args) throws IOException {
        //创建对象
        FileReader fr=new FileReader("..\\Myio\\a.txt");
        int ch=0;
        //循环获取数据
        while((ch=fr.read())!=-1){
            System.out.print((char)ch);
        }
        //释放资源
        fr.close();
    }
}

 

带参read方法👇

read(chars):读取数据,解码,强制类型转换三步合并了,把强转之后的字符放到数组当中

package fileReader;

import java.io.FileReader;
import java.io.IOException;


public class FileReaderDemo2 {
    public static void main(String[] args) throws IOException {
        //创建对象
        FileReader fr=new FileReader("..\\Myio\\a.txt");
        char[] ch=new char[2];
        int len=0;
        //循环读取数据
        while ((len=fr.read(ch))!=-1){
            //把数组中的数据变成字符串再打印
            System.out.print(new String(ch,0,len));
        }
        //释放资源
        fr.close();
    }
}

FileWriter

操作本地文件的字符输出流

FileWriter构造方法

public FileWriter(File file)        创建字符输出流关联本地文件
public FileWriter(string pathname)        创建字符输出流关联本地文件
public FileWriter(File file,boolean append)        创建字符输出流关联本地文件,续写

public FileWriter(string pathname,boolean append)  创建字符输出流关联本地文件,续写

FileWriter成员方法

void write(int c)        写出一个字符
void write(string str)        写出一个字符串
void write(string str,int off,int len)        写出一个字符串的一部分
void write(char[] cbuf)        写出一个字符数组
void write(char[] cbuf,int off, int len)        写出字符数组的一部分 

创建字符输出流对象

  • 参数是字符串表示的路径或者File对象都是可以的
  • 如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的
  • 如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关

写数据

  • 如果write方法的参数是整数,但是实际上写到本地文件中的是整数在字符集上对应的字符

释放资源

  • 每次使用完流之后都要释放资源 

void write(intc)        写出一个字符 

package fileWriter;

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterDemo1 {
    public static void main(String[] args) throws IOException {
        FileWriter fw=new FileWriter("..\\Myio\\a.txt");
        fw.write(25105);
        fw.close();
    }
}

void write(string str)        写出一个字符串 

package fileWriter;

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterDemo1 {
    public static void main(String[] args) throws IOException {
        FileWriter fw=new FileWriter("..\\Myio\\a.txt");
        fw.write("努力遇见更好的自己!!!");
        fw.close();
    }
}

void write(string str,int off,int len)        写出一个字符串的一部分 

package fileWriter;

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterDemo1 {
    public static void main(String[] args) throws IOException {
        FileWriter fw=new FileWriter("..\\Myio\\a.txt");
        String str="努力努力再努力";
        fw.write(str,0,4);
        fw.close();
    }
}

void write(char[] cbuf)        写出一个字符数组

package fileWriter;

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterDemo1 {
    public static void main(String[] args) throws IOException {
        FileWriter fw=new FileWriter("..\\Myio\\a.txt",true);
        char[] ch={'a','b','c','你'};
        fw.write(ch);
        fw.close();
    }
}

这里我打开了续写开关

void write(char[] cbuf,int off, int len)        写出字符数组的一部分 

package fileWriter;

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterDemo1 {
    public static void main(String[] args) throws IOException {
        FileWriter fw=new FileWriter("..\\Myio\\a.txt",true);
        char[] ch={'a','b','c','你'};
        fw.write(ch,0,2);
        fw.close();
    }
}

 

综合练习 

1、拷贝一个文件夹,考虑子文件夹 

package IOTest;

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

public class ioTset1 {
    public static void main(String[] args) throws IOException {
        //拷贝一个文件夹,考虑子文件夹
        File start=new File("E:\\111");
        File end=new File("E:\\222");
        copyFile(start,end);

    }

    private static void copyFile(File start, File end) throws IOException {
        //创建 end 所表示的目录及其所有不存在的父目录
        end.mkdirs();
        //进入数据源
        File[] files1 = start.listFiles();

        for (File file : files1) {
            if(file.isFile()){
                //判断文件拷贝
                FileInputStream fis=new FileInputStream(file);
                //这里要输入的地址是end里名字为file的子级路径
                FileOutputStream fos=new FileOutputStream(new File(end,file.getName()));
                byte[] bytes=new byte[1024];
                int len=0;
                while ((len= fis.read(bytes))!=-1){
                    fos.write(bytes,0,len);
                }
                fos.close();
                fis.close();
            }else{
                copyFile(file,new File(end,file.getName()));
            }
        }

    }
}

 

2、为了保证文件的安全性,就需要对原始文件进行加密存储,再使用的时候再对其进行解密处理。
加密原理:
对原始文件中的每一个字节数据进行更改,然后将更改以后的数据存储到新的文件中。
解密原理
读取加密之后的文件,按照加密的规则反向操作,变成原始文件。 

 

package IOTest;


import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ioTest2 {
    public static void main(String[] args) throws IOException {
       /* 为了保证文件的安全性,就需要对原始文件进行加密存储,再使用的时候再对其进行解密处理。
        加密原理:
        对原始文件中的每一个字节数据进行更改,然后将更改以后的数据存储到新的文件中。
        解密原理
        读取加密之后的文件,按照加密的规则反向操作,变成原始文件。*/
        //我们可以使用异或,异或两次就等于原来的数据
        FileInputStream fis=new FileInputStream("..\\Myio\\b.jpg");
        FileOutputStream fos=new FileOutputStream("..\\Myio\\c.jpg");

        int len=0;
        while ((len=fis.read())!=-1){
            //加密处理
            fos.write(len^2);
        }
        //释放资源
        fos.close();
        fis.close();
    }
}

 可以发现图片已经看不了了

如果想看这个图片的话,就得解密

package IOTest;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ioTest2_2 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("..\\Myio\\c.jpg");
        FileOutputStream fos=new FileOutputStream("..\\Myio\\d.jpg");

        int len=0;
        while ((len=fis.read())!=-1){
            //解密处理
            fos.write(len^2);
        }
        //释放资源
        fos.close();
        fis.close();
    }

}

 一运行就可以看到图片了👇

3、文本文件中有以下的数据:
2-1-9-4-7-8将文件中的数据进行排序,变成以下的数据:1-2-4-7-8-9 

 

package IOTest;

import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class ioTest3 {
    public static void main(String[] args) throws IOException {
        //2-1-9-4-7-8将文件中的数据进行排序,变成以下的数据:1-2-4-7-8-9
        FileReader fr=new FileReader("..\\Myio\\a.txt");
        StringBuilder sb=new StringBuilder();
        int ch=0;
        while((ch=fr.read())!=-1){
            sb.append((char)ch);
        }
        fr.close();
        String str = sb.toString();
        //给数字提取出来,再进行排序
        String[] arrStr = str.split("-");
        ArrayList<Integer>list=new ArrayList<>();
        for (String s : arrStr) {
            int i=Integer.parseInt(s);
            list.add(i);
        }
        //排序
        Collections.sort(list);
        ///写出数据
        FileWriter fw=new FileWriter("..\\Myio\\a.txt");
        for (int i = 0; i < list.size(); i++) {
            if(i==list.size()-1){
                fw.write(list.get(i)+"");
            }
            else{
                fw.write(list.get(i)+"-");
            }
        }
        fw.close();
    }
}

运行之后得出了想要的 结果

 


IO流的基本流就说到这里啦!!!努力遇见更好的自己!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

入门matlab

常识 如何建一个新文件 创建新文件&#xff0c;点击新建&#xff0c;我们就可以开始写代码了 为什么要在代码开头加入clear 假如我们有2个文件&#xff0c;第一个文件里面给x赋值100&#xff0c;第二个文件为输出x 依次运行&#xff1a; 结果输出100&#xff0c;这是因为它们…

less---20-28

less-20 这关登陆成功会显示cookie,所以抓包在cookie处注入 less-21 这关登陆成功会显示cookie,所以抓包在cookie处注入&#xff0c;发现不成功&#xff0c;查看代码发现被编码 先对注入语句进行base64编码再注入 less-22 闭合字符",同21关 less-23 这关查看代码发现…

高并发ping多台主机IP

简介 社区或者是大型公司往往有成千上万或者几百台设备&#xff0c;保持设备始终在线对网络运维人员来说至关重要&#xff0c;然而一个一个登录检查&#xff0c;或者一个一个ping并不明智&#xff0c;累人且效率极低&#xff0c;并出错率高。花钱买检测服务当我没说。 shell编…

C++【STL】改造红黑树简单模拟实现set map(带你了解set map的底层实现结构)

目录 一、学前铺垫&#xff08;泛型编程&#xff09; 二、改造红黑树 1.红黑树节点的改造 2.insert的改造 3.迭代器的实现 4.完整改造代码 三、set的模拟实现封装 四、map的模拟实现封装 五、完结撒❀ 前言&#xff1a; 下面为了简单模拟实现set map所出现的代码是以…

【诈骗离你我很近】中国同胞进来看看国外诈骗新套路。

前几天一个老外经常在CSDN给我发消息&#xff0c;我最开始很警惕&#xff0c;不过聊了大概半个月&#xff0c;我就没怎么怀疑他了&#xff0c;而且还很高兴认识了一个外国朋友。这半个月聊天内容很正常&#xff0c;就聊些中国的小习惯&#xff0c;让我教他用筷子。还问我有哪些…

算法家族之一——二分法

目录 算法算法的打印效果如果算法里的整型“i”为1如果算法里的整型“i”为11 算法的流程图算法的实际应用总结 大家好&#xff0c;我叫 这是我58&#xff0c;现在&#xff0c;请看下面的算法。 算法 #define _CRT_SECURE_NO_WARNINGS 1//<--预处理指令 #include <stdi…

实现手机空号过滤或手机号码有效性验证

手机空号过滤或手机号码有效性验证通常涉及使用专门的API接口来查询手机号码的状态。这些API接口通常由第三方服务提供商提供&#xff0c;它们会与电信运营商合作或利用自己的数据库来验证手机号码是否真实存在、是否已被分配、是否处于空号状态等。 以下是一些步骤和考虑因素…

Java:111-SpringMVC的底层原理(中篇)

这里续写上一章博客&#xff08;110章博客&#xff09;&#xff1a; 现在我们来学习一下高级的技术&#xff0c;前面的mvc知识&#xff0c;我们基本可以在67章博客及其后面相关的博客可以学习到&#xff0c;现在开始学习精髓&#xff1a; Spring MVC 高级技术&#xff1a; …

黑马程序员——Spring框架——day07——SpringBoot高级

目录&#xff1a; SpringBoot自动化配置原理 starter依赖管理机制自动化配置初体验Configuration配置注解Import注解使用1Import注解使用2Conditional衍生条件装配ConfigurationProperties配置绑定SpringBootApplication入口分析EnableAutoConfiguration自动配置注解按条件开启…

指针(初阶2)“野指针以及指针运算”

目录 一.野指针 二.如何避免野指针 三.指针运算 1、指针&#xff08;-&#xff09;整数 2、指针 - 指针 3、指针关系运算 小编在这里声明一下&#xff0c;将某一块的知识点分为上中下或者1&#xff0c;2&#xff0c;3来编写不是为了增加小编的文章总量&#xff0c;也不是故意这…

【大模型】Ollama+open-webui/Anything LLM部署本地大模型构建RAG个人知识库教程(Mac)

目录 一、Ollama是什么&#xff1f; 二、如何在Mac上安装Ollama 1. 准备工作 2. 下载并安装Ollama 3. 运行Ollama 4. 安装和配置大型语言模型 5. 使用Ollama 三、安装open-webui 1. 准备工作 2. Open WebUI ⭐的主要特点 3. Docker安装OpenWebUI&#xff0c;拉去太慢…

quick4 - hackmyvm

简介 靶机名称&#xff1a;quick4 难度&#xff1a;简单 靶场地址&#xff1a;https://hackmyvm.eu/machines/machine.php?vmQuick4 本地环境 虚拟机&#xff1a;vitual box 靶场IP&#xff08;quick4&#xff09;&#xff1a;192.168.56.104 跳板机IP(windows 11)&…

【OpenHarmony】ArkTS 语法基础 ⑤ ( ArkTS 状态管理 | @State 装饰器定义状态数据 | 使用状态数据渲染组件 )

文章目录 一、ArkTS 状态管理 - State 装饰器1、State 装饰器定义状态数据2、State 装饰器定义状态数据 - 示例分析3、使用 State 装饰器定义的状态数据渲染组件 - 示例分析 二、完整代码示例1、完整自定义组件代码示例2、展示效果 参考文档 : <HarmonyOS第一课>ArkTS开发…

2024年6月8日:极工度玩公司全球首发“竞技智慧,渔护海洋”竞渔棋,世界海洋日直播发布会圆满落幕

在纪念2024年世界海洋日之际&#xff0c;极工度玩公司举办了一场别具一格的全球益智游戏首发发布会&#xff0c;向世界彰显了其对海洋生态保护的坚定承诺与热忱。这场以“竞技智慧&#xff0c;渔护海洋”为主题的盛会&#xff0c;旨在为参与者带来创新的游戏体验&#xff0c;同…

归并排序法

归并排序法是典型的分治算法应用&#xff0c;1946年由冯.诺伊曼发明。 算法思路&#xff1a;归并排序算法有两个基本操作&#xff0c;一是分&#xff0c;也就是把原数组划分成两个子数组的过程&#xff0c;另一个是治&#xff0c;它将两个有序数组合并成一个更大的有序数组。 …

【SpringCloud学习笔记】Docker(中篇)

Docker 1. 自定义镜像 前面我们都是使用docker pull拉取仓库中现成的镜像&#xff0c;但是如果我们想要将一个Java应用程序构建成镜像然后部署应该怎么做呢&#xff1f;这个时候我们就需要自定义镜像了 **镜像&#xff1a;**本质上就是一堆文件的集合&#xff0c;包含了应用程…

!力扣102. 二叉树的层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] /*** Definition for…

PHP实现一个简单的接口签名方法以及思路分析

文章目录 签名生成说明签名生成示例代码签名校验示例代码 签名生成说明 B项目需要调用A项目的接口&#xff0c;由A项目为B项目分配 AccessKey 和 SecretKey&#xff0c;用于接口加密&#xff0c;确保不易被穷举&#xff0c;生成算法不易被猜测。 最终需要确保包含签名的参数只…

Letcode-Top 100二叉树专题

94. 二叉树的中序遍历 方法一&#xff1a;递归法 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeN…

机器学习——卷积神经网络

卷积神经网络CNN 多层感知机MLP的层数足够&#xff0c;理论上可以用其提取出二位特征&#xff0c;但是毕竟复杂&#xff0c;卷积神经网络就可以更合适的来提取高维的特征。 而卷积其实是一种运算 二维离散卷积的公式 可以看成g是一个图像的像素点&#xff0c;f是每个像素点对…