JAVA-IO(后端第三次培训)

本文介绍了Java中的IO操作,从文件和目录的基础知识开始,讲解了File类的作用和功能。接着深入到IO流的概念,包括字节流与字符流的区别,并通过实例展示了文件复制的过程。文章还提到了缓冲流的重要性,转换流的角色,以及数据流和对象流在处理基本类型和对象时的应用。最后,讨论了Java对象的序列化和反序列化机制,强调了在RMI中的重要性,以及如何使对象支持序列化。
摘要由CSDN通过智能技术生成

在细讲JavaIO之前,先了解一下文件这个概念,这里IO可以简单分解成In-Out(输入-输出),这里输入输出的对象,简单理解一下就是各式各样的文件。内存中存放的数据,在电脑关机后就会消失。如果需要长久保存文件,就需要硬盘,磁盘,光盘,U盘等存储设备,在数据存储过程中,为了区分数据类别以及方便查询,就出现了“文件”的概念。

日常使用中按功能区分为文本文件、视频文件、音频文件、图像文件等等。但是在存储介质中,本质都是一个0、1组成的比特串。

为了方便文件的管理,又出现了树形目录机制,文件夹下可以存放文件,也可以嵌套文件夹,这就便利了用户对文件的管理与使用。

Java如何实现对文件和目录的操作?
Java作为一种面向对象语言,自然是通过对象,java将文件/目录的各种信息进行封装,如此就诞生了一个对象。通过对这个对象操作,就能获取文件的各种信息,以及进行创建、删除、修改等操作。

对文件/目录的操作:

import java.io.File;
import java.io.IOException;

public class Test01 {
    public static void main(String[] args) throws IOException {

        //将文件封装成一个File类的对象
        File f1 = new File("C:\\work\\bluemsun\\IO\\TestDemo.txt");
        //注意转义问题
        File f11 = new File("C:\test.txt");    // Windows 是 \  存在问题,转义字符 \t 制表符
        File f12 = new File("C:\\test.txt");   // 因此要用 \\ 进行识别

        //如果是跨平台使用则建议使用File.separator方法获取系统的分隔符
        File f2 = new File("C:"+File.separator+"work\\bluemsun\\IO\\TestDemo.txt");
        /**
         * File.separator代表系统默认文件目录分隔符,即我们所说的“斜线”
         * 但由于在Windows系统中分隔符为“\”
         * 而在Linux系统中分隔符为“/”
         */

        /**
         * 1、separatorChar
         *       代表系统的默认名称分隔符,它被表示为一个字符串(只包含一个字符)。
         * 2、pathSeparator
         *       此字符用于分隔以路径列表形式给定的文件序列中的文件名
         *       在 UNIX和Linux系统上此字段为 ' : '
         *       在Windows 系统上为 ' ; '
         * 3、pathSeparatorChar
         *       代表系统的路径分隔符,它被表示为一个字符串(只包含一个字符)
         */

        //文件操作常用方法
        System.out.println("文件是否可读:" + f1.canRead());
        System.out.println("文件是否可写:" + f1.canWrite());
        System.out.println("获取文件的名字:" + f1.getName());
        System.out.println("获取该文件的上级目录:" + f1.getParent());
        System.out.println("是否是一个目录:" + f1.isDirectory());
        System.out.println("是否是一个文件:" + f1.isFile());
        System.out.println("是否隐藏:" + f1.isHidden());
        System.out.println("获取文件大小:" + f1.length() );
        System.out.println("是否存在:" + f1.exists());

        //文件路径
        System.out.println("绝对路径:"+f1.getAbsolutePath());
        System.out.println("相对路径:"+f1.getPath());
        System.out.println("toString:"+f1.toString());

        File f5 = new File("demo.txt");
        if(!f5.exists()) {
            f5.createNewFile();
        }
        System.out.println("-------------------------------");
        // 绝对路径 指的就是 真实的一个精准的完整的路径
        System.out.println("绝对路径:" + f5.getAbsolutePath());
        // 相对路径 有一个参照物,相对于这个参照物的路径
        // 在main方法中,相对位置指的就是:c:\work\bluemsun\IO\TestDemo.txt
        System.out.println("相对路径:" + f5.getPath());
        // toString的效果永远是 相对路径
        System.out.println("toString:" + f5.toString());

        System.out.println("-------------------------------");
        File f6 = new File("\\a\\b\\c\\demo.txt");
        System.out.println("绝对路径:" + f6.getAbsolutePath());
        System.out.println("相对路径:" + f6.getPath());
    }
}
import java.io.File;
import java.io.IOException;

public class Test02 {
    public static void main(String[] args) throws IOException {
        //将目录封装为一个File类的对象
        File f1 = new File("C:\\work\\bluemsun\\IO\\demo");

        //常用方法
        System.out.println("文件是否可读:" + f1.canRead());
        System.out.println("文件是否可写:" + f1.canWrite());
        System.out.println("获取文件的名字:" + f1.getName());
        System.out.println("获取该文件的上级目录:" + f1.getParent());
        System.out.println("是否是一个目录:" + f1.isDirectory());
        System.out.println("是否是一个文件:" + f1.isFile());
        System.out.println("是否隐藏:" + f1.isHidden());
        System.out.println("获取文件大小:" + f1.length() );
        System.out.println("是否存在:" + f1.exists());
        
        System.out.println("绝对路径:"+f1.getAbsolutePath());
        System.out.println("相对路径:"+f1.getPath());
        System.out.println("toString:"+f1.toString());
        
        //目录相关方法
        //创建多层目录
        /**
         * 删除目录时只删除一次,并且要求本层目录为空,如果有内容子不会被删除
         */
        File f2 = new File("C:\\work\\bluemsun\\IO\\demo\\a\\b\\c");
        
        f2.delete();
        
        String[] fileList = f1.list();
        /**
         * 获取目录下文件名或文件夹名
         */
        for (String s: fileList){
            System.out.println(s);
        }
        System.out.println("--------------------------------------");
        File[] files = f1.listFiles();
        /**
         * 将文件或者文件夹也封装到File对象里
         */
        for (File file: files){
            System.out.println(file.getName());
            System.out.println(file.getAbsolutePath());
        }
    }
}

   1. File类主要是JAVA为文件这块的操作(如删除、新增等)而设计的相关类

   2. File类的包名是java.io,其实现了Serializable, Comparable两大接口以便于其对象可序列化和比较

下面我们正式引入:IO流
I/O : Input/Output的缩写,用于处理设备之间的数据的传输。
形象理解:IO流 当做一根 “管”:

在这里插入图片描述

 

在这里插入图片描述

处理流,也叫包装流,是在“连接”已经存在的流(节点流或者处理流)之上,为程序提供强大的读写功能,更加灵活。如BufferedReader,BufferedWriter。

 在这里插入图片描述

 

Java后端调用第三方RESTful接口,你可以使用Java的HTTP客户端库来发送HTTP请求。以下是一个简单的示例代码,演示如何使用Apache HttpClient库发送GET请求: ```java import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; import java.io.IOException; public class RestApiClient { public static void main(String[] args) { CloseableHttpClient httpClient = HttpClientBuilder.create().build(); String url = "https://api.example.com/endpoint"; // 替换为目标接口的URL HttpGet httpGet = new HttpGet(url); try { HttpResponse response = httpClient.execute(httpGet); int statusCode = response.getStatusLine().getStatusCode(); String responseBody = EntityUtils.toString(response.getEntity()); System.out.println("Status code: " + statusCode); System.out.println("Response body: " + responseBody); } catch (IOException e) { e.printStackTrace(); } finally { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } } ``` 上述代码中,我们使用了Apache HttpClient库来创建一个HTTP客户端,并构造了一个GET请求。然后,我们使用这个客户端发送请求,并获取响应的状态码和响应体。最后,记得关闭HTTP客户端。 这只是一个简单的示例,你可以根据实际需求进行定制化开发,例如添加请求头、传递请求参数等。请注意,这只是其中一种实现方式,还有其他的HTTP客户端库可供选择,如OkHttp、Spring RestTemplate等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值