首页 > 其他分享 >Stream、File、IO、

Stream、File、IO、

时间:2024-08-20 17:04:22浏览次数:8  
标签:file IO Stream age File new public name

package com.dragon;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * @Description:
 * @Version:
 * @Time: 10:32 2024/08/20
 * @Author: zbl
 */
public class FileApp {
    private static final Logger log = LoggerFactory.getLogger(FileApp.class);
    private static final String path = System.getProperty("user.dir") + File.separator + "file-stream" + File.separator + "hello.txt";
    private static final String pathByObject = System.getProperty("user.dir") + File.separator + "file-stream" + File.separator + "person.txt";
    public static void main(String[] args) {
        writeFile();
        System.out.println("==============================================");
        readFile();

        System.out.println("======================序列化操作========================");
        writeObjectFile();
        readObjectFile();
    }

    /**
     * 读取文件
     */
    public static void readFile(){

        log.info("文件地址:{}",path);
        File file = new File(path);
        try (
                FileInputStream fileInputStream = new FileInputStream(file); // 创建文件输入流
                InputStreamReader isr = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8); // 创建输入流读取器
                BufferedReader br = new BufferedReader(isr) // 创建缓冲读取器
        ){
            String line;
            while ((line = br.readLine()) != null){
                log.info(line);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 写入文件
     */
    public static void writeFile(){
        File file = new File(path);
        StringBuilder builder = new StringBuilder();
        try (
                FileOutputStream fileOutputStream = new FileOutputStream(file); // 创建文件输出流
                OutputStreamWriter osw = new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8); // 创建输出流写入器
                BufferedWriter bw = new BufferedWriter(osw) // 创建缓冲写入器
        ){
            builder.append("现在是").append(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).append("写下《出师表》");
            builder.append(System.lineSeparator());
            builder.append("先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。");
            builder.append(System.lineSeparator());
            builder.append("宫中府中,俱为一体,陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。");
            builder.append(System.lineSeparator());
            builder.append("侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。");
            bw.write(builder.toString());
            bw.newLine();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            log.info("文件写入成功");
        }
    }
    /**
     * 序列化文件读取和写入
     */
    public static void writeObjectFile(){
        File file = new File(pathByObject);
        try (
                FileOutputStream fileOutputStream = new FileOutputStream(file); // 创建文件输出流
                ObjectOutputStream oos = new ObjectOutputStream(fileOutputStream) // 创建对象输出流
        ){
            oos.writeObject(new Person("zbl", 18));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            log.info("文件写入成功");
       }
    }
    public static void readObjectFile(){
        File file = new File(pathByObject);
        try {
            FileInputStream fileInputStream = new FileInputStream(file); // 创建文件输入流
            ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); // 创建对象输入流
            Person o = (Person) objectInputStream.readObject();
            log.info(o.toString());
        } catch (IOException | ClassNotFoundException e) {
            throw new RuntimeException(e);
        } finally {
            log.info("文件读取成功");
        }
    }

    static class Person implements Serializable{
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
       }

        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
}


标签:file,IO,Stream,age,File,new,public,name
From: https://www.cnblogs.com/dragon-925/p/18369832

相关文章

  • Java中stream流的filter机制理解
    一开始我并不理解,为什么filter接受一个实现了Predicate接口的对象后,就能通过重写的test方法来筛选元素,这个将筛选后的元素放到新的流中,我并不知道如何实现的。后来我发现ReferencePipeline抽象类中重写了filter方法,并且Collection中的stream方法返回的是StreamSupport.stream方法......
  • 《深入探究 @SpringBootApplication 注解的内部原理》
    《深入探究@SpringBootApplication注解的内部原理》@SpringBootApplication注解涵盖了SpringBoot的包扫描原理、自动装配原理等众多重要原理。接下来,我们将对该注解展开深入且详尽的研究。而研究上述原理的关键,在于剖析@SpringBootApplication内部的构成结构,如下图:......
  • [Javascript] HTML Template Interpolation
    Thebasic interpolatefunctionwecancreate:functioninterpolate(str,params){letnames=Object.keys(params);//["title","description"]letvalues=Object.values(params);//["Hello","World"]......
  • 第6章 GPIO输出-使用固件库控制LED
    第六章GPIO输出—使用固件库控制LED1.硬件设计在开发板上面与LED的连接见图,这是一个RGB灯,里面由红蓝绿三个小灯构成,使用PWM控制时可以混合成256不同的颜色。2.软件设计为了使工程更加有条理和方便迁移,我们把LED灯控制相关的代码分别独立存储。在“工程模板”之上新建一个......
  • [CSS] View Transition
    /*ViewTransitions*//*STEP1*/::view-transition-old(root),::view-transition-new(root){animation-duration:1s;}/*STEP2*/@keyframesfade-in{from{opacity:0;}}@keyframesfade-out{to{opacity:0;}}@ke......
  • 【Redis】Redis线程与IO模型—(三)
    Redis线程与IO模型一、Redis单线程二、多路复用机制三、Redis6.0多线程特性四、IO多线程配置一、Redis单线程通常说Redis是单线程,主要是指Redis的网络IO和键值对读写是由一个线程来完成的,其他功能,比如持久化、异步删除、集群数据同步等,是由额外的线......
  • IOS 12 自定义用户协议对话框
    实现效果实现逻辑本文使用QMUI里面提供的控制器+自定义控件实现。添加依赖#腾讯开源的UI框架,提供了很多功能,例如:圆角按钮,空心按钮,TextView支持placeholder#https://github.com/QMUI/QMUIDemo_iOS#https://qmuiteam.com/ios/get-startedpod"QMUIKit"还不了解如何使......
  • Java中处理SocketException: Connection reset”异常的方法
    Java中处理SocketException:Connectionreset”异常的方法在Java编程中,有时候我们会遇到java.net.SocketException:Connectionreset异常。这个异常通常表示网络连接被重置或关闭,导致无法继续进行数据传输。在处理这个异常时,有几种常用的方法可以尝试。方法一:检查网络连接首......
  • Visual Studio 2010旗舰版的VB.NET版本仓库库存管理系统的窗体应用程序
    PublicClassForm1'定义商品类ClassCommodityPublicNameAsStringPublicQuantityAsIntegerPublicPriceAsDoubleEndClass'商品列表PrivatecommoditiesAsNewList(OfCommodity)PrivateSubForm1_Load(senderAsObject,eAsEventA......
  • 非阻塞套接字与IO多路复用
    非阻塞套接字与IO多路复用非阻塞套接字#【本机环境运行】#01-TCP非堵塞通信.py#使用TCP调试助手作为客户端importsockettcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)tcp_socket.bind(("",9000))tcp_socket.listen(128)#设置监听套接字为非......