15-JavaIO框架

认识文件IO

IO指的是什么

I: input(输入-读)
O:OutPut(输出-写)

文件是什么

在磁盘中或者是存储磁盘介质的二进制文件

底层存储是以什么存储的

二进制

File-类(文件类)

File file = new File("文件地址");

常用方法

boolean exists( )	判断文件或目录是否存在
boolean isFile( )	判断是否是文件
boolean isDirectory( )	判断是否是目录
**String getPath( )	返回此对象表示的文件的相对路径名
**String getAbsolutePath( )	返回此对象表示的文件的绝对路径名
String getName( )	返回此对象表示的文件或目录的名称
boolean delete( )	删除此对象指定的文件或目录
boolean createNewFile( )	创建名称的空文件,不创建文件夹
boolean mkdir() 创建单层目录
boolean mkdirs() 创建多层目录
long  length()	返回文件的长度,单位为字节, 如果文件不存在,则返回 0L
String[] list()  列出当前文件夹中的文件和目录名字,是文件的话有后缀
File [] listFiles() 列出当前文件夹中的文件和目录的File对象

FileInputStream - 文件字节输入流

常用方法:
(1)int read( ) :单个字节的数据,char转换
(2)int read(byte[] b):通过字节数组来获取文件的数据
(3)int read(byte[] b,int off,int len):截取流
(4)void close( ):关闭流
(5)int available():获取文件的字节大小

// 单个字节获取文件内容
//1. 创建对象
        FileInputStream fis = new FileInputStream("F:\\fileupload\\demo.txt");

        StringBuffer stringBuffer = new StringBuffer();

        int read;
        //2. 读取文件内容
        while((read = fis.read())!=-1){
            stringBuffer.append((char)read);
        }

        //3. 关闭io流
        fis.close();
//字节数组获取文件内容
 FileInputStream fileIn = new FileInputStream("E:/JavaIOTest/my.txt");//创建文件输入流
        //获取到文件的字节数
        int available = fileIn.available();
        //字节数组
        byte [] charArr = new byte[available];
        int readByte = 0;
        int index = 0;
        do{
            //将字节读取到字节数组中
            readByte = fileIn.read(charArr);
            index++;
            System.out.println("循环!"+index);
        }while(readByte!=-1);//当read的值为-1时说明文件已经读完了
        String aa = new String(charArr);//String 构造器传入byte数组创建字符串
        System.out.println(aa);
        fileIn.close();//关闭流

FileOutputStream - 文件字节输出流

常用方法:
(1)void write(int c):输出单个字节编码的整型值
(2)void write(byte[] buf):输出字节数组,String的getBytes方法使用
(3)void write(byte[] b,int off,int len):数组字节数组的部分内容
(4)void close( ):关闭流
(5)flush():清空流,将流中的内容输出到目标

 //1. 创建对象
        FileOutputStream fos = new FileOutputStream("F:\\fileupload\\ggg",true);
        //2. 写
        String str = "高\t靖\n博";
        // 65 --> A
        byte[] bytes = str.getBytes();
        fos.write(bytes);

        //3. 关闭io流
        fos.flush();
        fos.close();

FileOutputStream 构造器

FileOutputStream (File file) 
FileOutputStream(String name) // 文件路径,当文件不存在,**输出流会帮你创建文件**	
FileOutputStream(String name,boolean append)// 默认情况append为false,代表不追加,设置为true输出流内容是追加到文件内容末尾

FileReader - 文件字符输入流

常用方法:
(1)int read( ) :单个字节的数据,char转换
(2)int read(char [] b):通过字节数组来获取文件的数据
(3)int read(char [] b,int off,int len):截取流
(4)void close( ):关闭流

// 1. 创建对象
        FileReader fr = new FileReader("F:\\fileupload\\demo.txt");

        //2 . 读取
        char [] arr = new char[100];

        StringBuffer sb = new StringBuffer();

        int read;
        while((read = fr.read(arr))!=-1){
            for(int i=0;i<arr.length;i++){
                if(arr[i]!=0){
                    sb.append(arr[i]);
                }else{
                    break;
                }
            }
        }

        System.out.println(sb);

        //3. 关闭
        fr.close();

BuffedReader - 缓冲字符输入流

特殊方法:
(1)String readLine(): 逐行读取
常用方法:

(1)int read( ) :单个字符的数据,char转换
(2)int read(char [] b):通过字符数组来获取文件的数据
(3)int read(char [] b,int off,int len):截取流
(4)void close( ):关闭流

// 1. 创建对象
        //1.1 创建FileReader
        FileReader fr = new FileReader("F:\\fileupload\\demo.txt");

        //1.2 创建BufferedReader
        BufferedReader br = new BufferedReader(fr);

        //2 . 读取
        String s = br.readLine();// 按行读取  每次读取一行

        //3. 关闭
        fr.close();

FileWriter - 文件字符输出流

常用方法:
(1)void write(int c):输出单个字符编码的整型值
(2)void write(char [] buf):输出字符数组
(3)void write(char [] b,int off,int len):数组字符数组的部分内容
(4)void close( ):关闭流
(5)flush():清空流,将流中的内容输出到目标

// 1. 创建对象
        FileWriter fw = new FileWriter("F:\\fileupload\\xx\\demo2.txt",true);

        //2 . 写出
        fw.write("world");

        //3. 关闭
        fw.flush();
        fw.close();

FileWriter 构造器

FileWriter (File file) 
FileWriter(String name) // 文件路径,当文件不存在,**输出流会帮你创建文件**	
FileWriter(String name,boolean append)// 默认情况append为false,代表不追加,设置为true输出流内容是追加到文件内容末尾

BufferedWriter - 缓冲字符输出流

常用方法:
(1)void write(int c):输出单个字符编码的整型值
(2)void write(char [] buf):输出字符数组
(3)void write(char [] b,int off,int len):数组字符数组的部分内容
(4)void close( ):关闭流
(5)flush():清空流,将流中的内容输出到目标

// 1. 创建对象
        //1。1 FileWrtier - 设置是否追加是在FileWriter构造器里配置的
        FileWriter fw = new FileWriter("F:\\fileupload\\demo.txt",true);

        BufferedWriter bw = new BufferedWriter(fw);

        //2 . 写出
        bw.write("123");

        //3. 关闭
        bw.flush();
        bw.close();
        fw.close();

二进制文件-读写

DataInputStream、DataOutputStream

// 1. 创建对象
        //1.1 创建FileInputStream
        FileInputStream fis = new FileInputStream("F:\\fileupload\\123.jpg");

        DataInputStream dis = new DataInputStream(fis);
        //2 . 读取出
        byte [] arr = new byte[dis.available()];

        System.out.println(dis.available());

        dis.read(arr);

        System.out.println();

        //3. 关闭
        dis.close();
        fis.close();

        // 1. 创建对象
        //1.1  FileOutputStream
        FileOutputStream fos = new FileOutputStream("F:\\fileupload\\456.jpg");
        //1.2 DataOutputStream
        DataOutputStream dos = new DataOutputStream(fos);

        //2. 写出
        dos.write(arr);

        //3. 关闭
        dos.flush();
        dos.close();
        fos.close();

转码输入输出

1.读取
默认情况下使用UTF-8字符集读取
InputStreamReader isr = new InputStreamReader(new FileInputStream("in.txt"));

指定字符集读取
InputStreamReader isr2 = new InputStreamReader(new FileInputStream("in.txt") , "GBK");

2.写入
默认情况下使用UTF-8字符集写入
OutputStreamWriter isr = new OutputStreamWriter(new FileOutputStream("out.txt"));

指定字符集写入
OutputStreamWriter isr2 = new OutputStreamWriter(new FileOutputStream("out.txt") , "GBK");

对象序列化

Dog d1 = new Dog();
        d1.name = "张三";
        d1.age = 18;

        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("F:\\fileOrder\\DogObject1"));

        oos.writeObject(d1);

        oos.flush();
        oos.close();

对象反序列化

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("F:\\fileOrder\\dog.bat"));

        Dog o = (Dog)ois.readObject();

        System.out.println(o.name);

        ois.close();

Properties类

输出配置文件

 // 1.创建Properties集合对象,添加数据
        Properties properties = new Properties();
        properties.setProperty("赵丽颖","18");
        properties.setProperty("杨幂","20");
        properties.setProperty("王祖蓝","30");

        // 2.创建字符输出流/字节输出流,构造方法中要绑定输出的目的地
        FileWriter fw = new FileWriter("myfile\\prop.txt");

        // 3.把集合中的临时数据, 持久化写入到硬盘中存储
        properties.store(fw,"save date");
        // 4.释放资源
        fw.close();

读取配置文件

Properties pro = new Properties();

        pro.load(new FileInputStream("F:\\fileOrder\\my.properties"));

        // 遍历集合并打印
        Set<String> strings = pro.stringPropertyNames();
        for (String key : strings ) {
            System.out.println(key+" -- "+pro.getProperty(key));
        }

类加载器获取文件的方法

InputStream resourceAsStream =
                Cach.class.getResourceAsStream("../conf/my.properties");// 相对路径写法
//InputStream resourceAsStream =Cach.class.getResourceAsStream("/com/huawei/java/conf/my.properties");// 绝对路径写法(项目根路径 src)


        Properties pro = new Properties();

        pro.load(resourceAsStream);

        resourceAsStream.close();

        String userName = pro.getProperty("userName");

        System.out.println(userName);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个基于t-io框架实现即时通讯的示例代码: ```java public class ChatServer { public static void main(String[] args) throws Exception { TioServer server = new TioServer(new ChatServerListener()); server.start("0.0.0.0", 8888); } private static class ChatServerListener extends ServerTioConfigAdapter { @Override public void init(ChannelContext channelContext) throws Exception { // 设置心跳超时时间为60秒 channelContext.setHeartbeatTimeout(60); } @Override public void onAfterConnected(ChannelContext channelContext, boolean isConnected, boolean isReconnect) throws Exception { String clientIp = channelContext.getClientNode().getIp(); System.out.println("客户端 " + clientIp + " 已连接"); } @Override public void onAfterReceived(ChannelContext channelContext, Packet packet, int packetSize) throws Exception { // 接收到消息时的处理逻辑 ChatPacket chatPacket = (ChatPacket) packet; String message = chatPacket.getMessage(); System.out.println("收到来自 " + channelContext.getClientNode().getIp() + " 的消息:" + message); // 将消息广播给所有连接的客户端 Tio.sendToAll(channelContext.getGroupContext(), chatPacket); } @Override public void onAfterClose(ChannelContext channelContext, Throwable throwable, String remark, boolean isRemove) throws Exception { String clientIp = channelContext.getClientNode().getIp(); System.out.println("客户端 " + clientIp + " 已断开连接"); } } private static class ChatPacket extends Packet { private String message; public ChatPacket(String message) { this.message = message; } @Override public byte[] encode() { return message.getBytes(); } @Override public void decode(byte[] bytes) { message = new String(bytes); } public String getMessage() { return message; } } } ``` 该示例代码实现了一个简单的聊天服务器,客户端与服务器之间通过t-io框架实现即时通讯。在服务器端,我们使用`ChatServerListener`类作为`t-io`的服务端配置适配器,处理客户端连接、断开连接和接收消息等事件。在客户端每次发送消息时,我们将消息封装为`ChatPacket`对象并广播给所有连接的客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘的高先生

编写不易,感谢大佬的赏赐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值