java IO流_2

news2024/10/1 1:32:08

目录

字节缓冲流

序列化

 使用对象流实现序列化

标准输入输出流 

 转换流

 打印流

PrintStream

PrintWriter

properties读写文件


字节缓冲流

        字节流

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

public class FileCopy {
    public static void main(String[] args) {
        //文件拷贝
        FileInputStream fileInputStream=null;//输入流
        FileOutputStream fileOutputStream=null;//输出流
        //源文件和目标文件
        String srcpath="C:\\Users\\Elysia\\Pictures\\Saved Pictures\\illust_86465238_20210124_003335.jpg";
        String destpath="D:\\javacode\\IO\\src\\pic.jpg";
        try {
            fileOutputStream=new FileOutputStream(destpath,true);
            fileInputStream=new FileInputStream(srcpath);
            byte[] buf=new byte[1024];
            int len;
            while((len=fileInputStream.read(buf))!=-1){
                fileOutputStream.write(buf,0,len);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                fileOutputStream.close();
                fileInputStream.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

序列化

        将java对象转化成字节序列,可以保存或传输,以备以后重新恢复。

意义:使得对象可以脱离程序,独立存在

前提:该对象的类支持序列化,必须实现两个接口之一

  1. Serializable        只是一个标记接口,无需实现任何方法
  2. Externalizble

#所有可能网络传输的对象,都应该是可序列化的类

 使用对象流实现序列化

        字节流,处理流,用于保存对象,传输对象。

步骤:

  1. 创建一个ObjectOutputStream,处理流,须建立在其他节点流之上
  2. 使用writeObject() 将对象序列化输出       

反序列化 

  1. 创建一个ObjectInputStream
  2. 调用readObject()方法读取流中的对象,若知道对象类型,可强转

 

package pack;

import java.io.Serializable;
//实现Serializable
public class MidObj implements Serializable {
    private String name;
    private int data;
    public MidObj(String name, int data) {
        this.name = name;
        this.data = data;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getData() {
        return data;
    }
    public void setData(int data) {
        this.data = data;
    }
}
package Serialize;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

import pack.MidObj;//导包很重要
public class Serialize {
    public static void main(String[] args) throws Exception{
        String path="D:\\javacode\\IO\\src\\Serialize\\obj.txt";
        MidObj obj=new MidObj("Serialize系列化",114);
        ObjectOutputStream objectOutputStream=new ObjectOutputStream(new FileOutputStream(path));
        objectOutputStream.writeObject(obj);
        objectOutputStream.close();
    }
}
package Deserialize;

import pack.MidObj;

import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class Deserialize {
    public static void main(String[] args) throws Exception{
        String path="D:\\javacode\\IO\\src\\Serialize\\obj.txt";
        ObjectInputStream objectInputStream=new ObjectInputStream(new FileInputStream(path));
        MidObj midObj=(MidObj) objectInputStream.readObject();
        System.out.println(midObj.getName()+midObj.getData());
        objectInputStream.close();
    }
}

细节:

  1. static和transient修饰的成员不会被序列化
  2. 建议添加 序列版本号  SerialVersionUID,提高版本兼容性
  3. 要求里面属性的类型也是实现序列化的
  4. 序列化具备可继承性,父类实现序列化,其所有子类也默认实现了

标准输入输出流 

        system.in        编译类型  InputStream

                                运行类型  BufferedInputStream

        System.out        编译类型  PrintStream

                                  运行类型  PrintStream

 转换流

        由于编码方式多种,容易导致乱码问题,因此需要转换流

 Reader的子类

 Charset        编码方式 

 Writer的子类

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;

public class InputStreamReader_ {
    public static void main(String[] args) throws Exception{
        String path="D:\\javacode\\IO\\src\\test.txt";
        String Charset="UTF-8";
        InputStreamReader inputStreamReader=new InputStreamReader(new FileInputStream(path),Charset);
        BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
        String line;
        while((line=bufferedReader.readLine())!=null){
            System.out.println(line);
        }
        System.out.println("按照"+Charset+"读取文本");
        bufferedReader.close();
    }
}
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

public class OutputStreamWriter_ {
    public static void main(String[] args) throws Exception{
        String path="D:\\javacode\\IO\\src\\test.txt";
        String Charset="UTF-8";
        OutputStreamWriter outputStreamWriter=new OutputStreamWriter(new FileOutputStream(path),Charset);
        BufferedWriter bufferedWriter=new BufferedWriter(outputStreamWriter);
        bufferedWriter.write("按照UTF-8写入");
        bufferedWriter.close();//一定要关
    }
}

一定要关闭流

 打印流

PrintStream

        字节流,只有输出流

 System.out就是字节打印流

import java.io.PrintStream;

public class PrintStream_ {
    public static void main(String[] args) throws Exception{
        PrintStream out =System.out;
        out.println("666");
        out.write("hello".getBytes());//print底层就是write
        PrintStream ps=new PrintStream("D:\\javacode\\IO\\src\\test.txt");//输出到指定位置
        ps.println("Never can we suspend the time");
        ps.close();
    }
}

PrintWriter

         字符流,只有输出流

import java.io.FileWriter;
import java.io.PrintWriter;

public class PrintWriter_ {
    public static void main(String[] args) throws Exception{
        PrintWriter out=new PrintWriter(System.out);
        out.println("hello");
        out.close();//注意close
        PrintWriter pw=new PrintWriter(new FileWriter("D:\\javacode\\IO\\src\\test.txt",true));
        pw.println("成功写入");
        pw.close();
    }
}

properties读写文件

         集合类,底层为hashTable

import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Properties;

public class properties_ {
//    public static void main(String[] args) throws Exception{
//        String path="D:\\javacode\\IO\\src\\druid.properties";
//        BufferedReader bufferedReader=new BufferedReader(new FileReader(path));
//        String line;
//        while((line=bufferedReader.readLine())!=null){
//            String[] split=line.split("=");
//            System.out.println(split[0]+"都值为"+split[1]);
//        }
//        bufferedReader.close();
//    }
    public static void main(String[] args) throws Exception{
        Properties properties=new Properties();
        String path="D:\\javacode\\IO\\src\\druid.properties";
        String path0="D:\\javacode\\IO\\src\\druid0.txt";
        properties.load(new FileReader(path));
        properties.list(System.out);//打印流 字节打印流
        PrintWriter pw=new PrintWriter(new FileWriter(path0));
        properties.list(pw);//打印流
        pw.close();
        properties.setProperty("username","root1");
        System.out.println("\nuser:"+properties.getProperty("username")+"\npwd:"+properties.getProperty("password"));
    }
}
import java.io.FileOutputStream;
import java.util.Properties;

public class properties_1 {
    public static void main(String[] args) throws Exception{
        Properties properties=new Properties();
        properties.setProperty("username","root");
        properties.setProperty("password","111111");
        properties.setProperty("charset","UTF-8");
        String path="D:\\javacode\\IO\\src\\druid.properties";
        properties.store(new FileOutputStream(path),null);
    }
}

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

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

相关文章

年薪30W+,待遇翻倍,我的经历值得每个测试人借鉴

从自考大专到出走公司,从半年无业露宿深圳北站,从8k…到11.5k…再到20k,我的经历值得每个测试人借鉴 或许学历并没有那么重要 12年高考之后,在朋友的介绍下(骗了过去),没有好好的读大学&#x…

java mysql高校后勤管理系统的设计与开发 宿舍公寓管理

1.用户管理子系统:采用通过用户密码的登录机制,管理员登录后可以修改个人信息(用户名、密码、姓名、联系方式),具有楼的属性,只能对所管辖宿舍楼进行查询、修改等操作。 2.宿舍信息管理子系统&a…

上海出台新政数字经济、人工智能利好

利好一、上海印发 《上海市推进算力资源统一调度指导意见》的通知 数字经济、人工智能的利好不断。 19日,上海市经济信息化委印发《上海市推进算力资源统一调度指导意见》的通知。 其中提到: 到2023年底,依托本市人工智能公共算力服务平台…

【U8+】win10/11系统注册用友U8硬加密

【问题需求】 由于用友U813.0及之前版本都是硬加密, 并且注册的时候严格要求使用IE浏览器。 但是随着系统的升级,绝大多数的都开始使用win10/11系统。 并且IE浏览器已经不支持win10/11系统, 取而代之的是Edge浏览器。 【经验分享】 以下分享…

扬帆优配|放量跌停和缩量跌停的区别?哪个更好?

投资者在买卖股票的过程中股票跌停的话,一般会呈现两种状况:一种是放量跌停,一种是缩量跌停。很多投资者不明白两者到底有什么差异,那么放量跌停和缩量跌停的差异是什么?哪个更好?下面就由扬帆优配有为我们…

使用node版本管理器gnvm

目录 一、官网 二、下载 三、查看本机node安装地址 四、将gnvm放到node安装目录 五、安装其他版本node(以管理员身份打开CMD) 六、使用指定版本(以管理员身份打开CMD) 七、查看当前版本(以管理员身份打开CMD&…

Spring依赖注入的三种方式使用及优缺点

初学Spring的时候,我们从Spring容器中获取Bean对象都是通过bean标签先将Bean对象注册到Spring容器中,然后通过上下文对象congtext的getBean方法进行获取,显然这种方法较为麻烦,所以有了更简单的存方法:五大类注解;取方…

应急响应 - Windows用户分析,Windows隐藏账号分析,Windows克隆账号分析

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 Windows账户分析 一、普通用户二、隐藏用户1、lusrmgr.msc2、注册表 三、克隆账号 攻击者…

mysql varchar类型字段为数字时,不带引号查询时查询结果与事实不符

背景 今天出现了一个bug,在数据库中我们将订单表中的order_no从之前的bigint(20)改成varchar(20)后,原有的代码逻辑在进行时查询时,之前是以Long类型传参查询的。 select * from order_main where order_no16541913435669023debug时的时候发现…

2023年湖北安全员ABC报名条件和报名资料是什么?

一、湖北安全员ABC报名条件要求: 1.安全员A证针对的是企业主要负责人,包括法定代表人、总经理(总裁)、分管安全生产的副总经理(副总裁)、分管生产经营的副总经理(副总裁)、技术负责…

全景丨0基础学习VR全景制作,平台篇第八章:全局功能-开场地图

大家好欢迎观看蛙色平台使用教程 功能位置示意 一、本功能将用在哪里? 开场地图分为两种,分别是高德地图和手绘地图。 高德地图点位目前系统自动借用高德官方地图位置,手绘地图点位需手动添加 高德地图展示 高德地图展示 二、如何使用本功…

JaveEE UDP 与 TCP 原理

这篇博客真的很详细很详细很详细,不打算试试看吗 > 。o 文章目录 JaveEE & UDP 与 TCP 原理1. 应用层协议(自定义组织格式)2. 传输层UDP协议2.1 数据报报文格式2.1.1 源端口与目的端口2.1.2 报文长度和校验和 3. 传输层TCP协议3.1 TCP…

MySQL 主键自增也有坑?

在上篇文章中,松哥和小伙伴们分享了 MySQL 的聚簇索引,也顺便和小伙伴们分析了为什么在 MySQL 中主键不应该使用随机字符串。但是主键不用随机字符串用什么?主键自增?主键自增就是最佳方案吗?有没有其他坑?…

大数据实战 --- 日志文件

目录 开发环境 数据描述 功能需求 数据准备 分析数据 HBase HIive 统计查询 开发环境 HadoopHiveSparkHBase 启动Hadoop:start-all.sh 启动zookeeper:zkServer.sh start 启动Hive: nohup hiveserver2 1>/dev/null 2>&1 …

Python 图像处理实用指南:1~5

原文:Hands-On Image Processing with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线的时候,…

如何恢复回收站中被删除的文件?高效的恢复技巧

一般情况下,我们从电脑上普通删除的文件,会经过回收站(除非文件过大),想要在回收站找回删除的东西,是很简单的,我们只需要打开回收站,找到删除的文件,右键点击并选择还原…

jmeter配置文件

在jmeter安装目录的bin目录下,有多个配置文件 其中最核心的是jmeter.properties jmeter.properties 修改语言:languagezh_CN #简体中文,也可以在GUI页面修改 远程主机配置   # 配置远程主机的 IP,默认为本机。用逗号&q…

反转链表(链表篇)

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 思路: ①双指针法 ②递归法 如果再定义一个新的链表,实现链表元素的反转,其实这是对内存空间的浪费。 其实只需要改变链表的next指针的指向,…

Ae:摄像机选项

摄像机选项 Camera Options 快捷键:AA 摄像机选项 Camera Options与“摄像机设置”中的参数大同小异且同步变化,额外增加了一些与镜头模糊和散景光斑形状有关的摄像机属性。 请参阅: 《Ae:摄像机设置》 在合成设置中,选…

“不要放过这个春天”解锁品牌春日宣传新玩法

在万物复苏的春天,人们换新装、踏青等需求蓄势待发,出现了全民消费热情高涨的趋势,让品牌「贩卖春天」的宣传此起彼伏。 品牌洞察到用户的消费需求,打造具有品牌特色的浪漫宣传,如采用春日限定元素、创新春天宣传场景…