IO流字符流(FileReader与FileWriter)

news2024/10/7 12:19:16

目录

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流的基本流就说到这里啦!!!努力遇见更好的自己!!!

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

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

相关文章

如何学习Golang语言!

第一部分&#xff1a;Go语言概述 起源与设计哲学&#xff1a;Go语言由Robert Griesemer、Rob Pike和Ken Thompson三位Google工程师设计&#xff0c;旨在解决现代编程中的一些常见问题&#xff0c;如编译速度、运行效率和并发编程。主要特点&#xff1a;Go语言的语法简单、编译…

Bootstrap框架集成ECharts教程

最新公司项目要在原有的基础上增加一些饼状图和柱状图来统计一些数据给客户&#xff0c;下面就是集成的一个过程&#xff0c;还是很简单的&#xff0c;分为以下几步 1、引入ECharts的包 2、通过ECharts官网或者菜鸟教程直接拿示例代码过来修修改改直接用就可以了 注意&#xf…

三维地图Cesium,加载一个模型,模型沿着给定的一组经纬度路线移动

目录 实现效果 实现思路 功能点 选择移动路线 加载模型和移动路线 重新运行 指定位置(经纬度点)开始移动 视角切换 到站提示 运行 停止 联动接口 完整代码 html js逻辑 trainOperation.js sourceData.js gitee仓库项目代码 疑问解答 实现效果 三维地图Cesiu…

pyqt QlineEdit内部增加按钮方法

按钮放在QlineEdit内部&#xff0c;界面更紧凑&#xff0c;体现了按钮和文本框的强关联。 def addButton(self,lineEdit):btn QtWidgets.QPushButton("")icon1 QtGui.QIcon()icon1.addPixmap(QtGui.QPixmap(":/image/images/th.png"), QtGui.QIcon.Norm…

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

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

【JsDoc】JsDoc用法 | 巧妙用法

type type {other} other 接收表达式或字符 1、数组代码提示 1、效果图 1、码 /*** type {Array.<play|paush|next>} */ let music []2、字符串提示 2、效果图 2、码 /*** type {a|b|c}*/ let str

minio的一个基础使用案例:用户头像上传

文章目录 一、minio下载安装&#xff08;Windows&#xff09;二、案例需求分析三、后端接口开发 一、minio下载安装&#xff08;Windows&#xff09; 1. 下载minio服务端和客户端 minio下载地址 2. 手动搭建目录 /minio/binmc.exeminio.exe/data/logs手动创建minio应用程序目…

Linux入门学习(2)

1.相关复习新的指令学习 &#xff08;1&#xff09;我们需要自己创建一个用户&#xff0c;这个用户前期可以是一个root用户&#xff0c;后期使用创建的普通用户 &#xff08;2&#xff09;文件等于文件内容加上文件属性,对于文件的操作就包括对于文件内容的操作和文件属性&…

像素坐标系与图像坐标系

前言 在数字图像处理中&#xff0c;经常会看到使用 (x, y) 表示图像中的某个像素点。 在一些图像处理库&#xff0c;例如 Pillow 、OpenCV 、Numpy 中也会使用到坐标系处理图像的像素点。 介绍 无论是像素坐标系还是图像坐标系&#xff0c;其原理都是一样的&#xff1a; 以…

Freetype 介绍和使用

目录 一、矢量字体引入 二、Freetype 介绍 1.给定一个字符&#xff0c;怎么在字体文件中找到它的关键点&#xff1f; 2.文字显示过程 3.如何使用 freetype 库 三、在 LCD 上显示一个矢量字体 1.使用 wchar_t 获得字符的 UNICODE 值 2.使用 freetype 得到位图 3.在屏幕上…

Linux 内核优化:提升性能测试效率的关键步骤

大家好&#xff0c;本文介绍了如何通过优化 Linux 内核配置来提高系统性能&#xff0c;特别是在进行性能测试时。从调整文件系统、网络参数到内核参数优化&#xff0c;我们将深入探讨每个关键步骤&#xff0c;以帮助你在性能测试中取得更好的效果。 在进行性能测试时&#xff0…

笔记-Python中的struct模块

了解c语言的人&#xff0c;一定会知道struct结构体在c语言中的作用&#xff0c;它定义了一种结构&#xff0c;里面包含不同类型的数据(int,char,bool等等)&#xff0c;方便对某一结构对象进行处理。而在网络通信当中&#xff0c;大多传递的数据是以二进制流&#xff08;binary …

LabVIEW与Python的比较及联合开发

LabVIEW和Python在工业自动化和数据处理领域各具优势&#xff0c;联合开发可以充分发挥两者的优点。本文将从语言特性、开发效率、应用场景等多个角度进行比较&#xff0c;并详细介绍如何实现LabVIEW与Python的联合开发。 语言特性 LabVIEW 图形化编程&#xff1a;LabVIEW使用…

流程的控制

条件选择语句 我们一般将条件选择语句分为三类&#xff1a; 单条件双条件多条件 本篇文章将分开诉说着三类。 单条件 单条件的语法很简单&#xff1a; if (条件) {// 代码}条件这里我们需要注意下&#xff0c;可以向里写入两种&#xff1a; 布尔值布尔表达式 当然&…

用一个实例看如何分享大量照片 Apache 批量处理和不到50行PHP代码

起因&#xff1a;20多人的同学聚会&#xff0c;有各人拍的照片、视频&#xff0c;包括手机、相机、无人机拍的&#xff0c;仅仅照片原图就已经超过3G了&#xff0c;如果加上视频就很快需要不小的外存了&#xff0c;如何分享和保存这些照片和和视频深究起来是有很多讲究的&#…

黑马集成电路应用开发入门课程

"黑马集成电路应用开发入门课程"旨在引导学员了解集成电路应用开发的基础知识和技能。课程内容涵盖集成电路原理、设计流程、应用开发工具等&#xff0c;通过实践项目和案例分析&#xff0c;帮助学员掌握集成电路应用开发的核心概念和方法&#xff0c;为未来在该领域…

构建第一个ArkTS应用之@卡片事件能力说明

ArkTS卡片中提供了postCardAction()接口用于卡片内部和提供方应用间的交互&#xff0c;当前支持router、message和call三种类型的事件&#xff0c;仅在卡片中可以调用。 接口定义&#xff1a;postCardAction(component: Object, action: Object): void 接口参数说明&#xff1…

Linux---Linux编译器-gcc与g++的使用

GCC是以GPL许可证所发行的自由软件&#xff0c;也是GNU计划的关键部分。GCC的初衷是为GNU操作系统专门编写一款编译器&#xff0c;现已被大多数类Unix操作系统&#xff08;如Linux、BSD、MacOS X等&#xff09;采纳为标准的编译器。 gcc是专门用来编译C语言的&#xff0c;而g是…

安装MySQL Sample Database

本文安装的示例数据库为官方的Employees Sample Database。 操作过程参考其安装部分。 在安装前&#xff0c;MySQL已安装完成&#xff0c;环境为Linux。 克隆github项目&#xff1a; $ git clone https://github.com/datacharmer/test_db.git Cloning into test_db... remo…

梯度提升决策树(GBDT)

GBDT&#xff08;Gradient Boosting Decision Tree&#xff09;&#xff0c;全名叫梯度提升决策树&#xff0c;是一种迭代的决策树算法&#xff0c;又叫 MART&#xff08;Multiple Additive Regression Tree&#xff09;&#xff0c;它通过构造一组弱的学习器&#xff08;树&am…