首页 > 编程语言 >【高级编程】Java流(上)字节流 InputStream OutputStream

【高级编程】Java流(上)字节流 InputStream OutputStream

时间:2024-09-09 14:51:32浏览次数:9  
标签:文件 OutputStream Java String System InputStream file println out

文章目录

文件操作

文件是指相关记录或放在一起的数据的集合。是一种用于存储数据的基本单位,它可以包含各种类型的信息,例如文本、图像、音频或视频。文件在计算机中通常存储在磁盘或其他存储介质上,并且每个文件都有一个唯一的文件名和扩展名(如 .txt.jpg.mp4),用于标识文件的类型和用途。

文件的主要特征

文件名和扩展名、文件路径、文件大小、文件属性、文件系统。

在 Java 中,java.io.File 类是进行文件和目录操作的主要类。它提供了一些方法来创建、删除、检查文件和目录的属性以及操作文件内容。

方法名称说明
boolean exists( )判断文件或目录是否存在
boolean isFile( )判断是否是文件
boolean isDirectory( )判断是否是目录
String getPath( )返回此对象表示的文件的相对路径名
String getAbsolutePath( )返回此对象表示的文件的绝对路径名
String getName( )返回此对象表示的文件或目录的名称
boolean delete( )删除此对象指定的文件或目录
boolean createNewFile( )创建名称的空文件,不创建文件夹
long length( )返回文件的长度,单位为字节, 如果文件不存在,则返回 0L
String path = "D:/4072/1/l.txt";
File file = new File(path);

// 判断文件或目录是否存在
System.out.println("判断文件或目录是否存在: " + file.exists());
// 判断是否是文件
System.out.println("判断是否是文件: " + file.isFile());
// 判断是否是文件夹
System.out.println("判断是否是文件夹: " + file.isDirectory());
// 获取相对路径
System.out.println("相对路径: " + file.getPath());
// 获取绝对路径
System.out.println("绝对路径: " + file.getAbsolutePath());
// 获取文件或目录名称
System.out.println("获得文件或目录名称: " + file.getName());
// 获取文件字节数
System.out.println("获得文件字节数: " + file.length());
// 删除文件或目录
System.out.println("删除文件或目录: " + file.delete());

在指定文件夹下创建 txt 文件

public static void main(String[] args) {
    // 定义路径和文件名
    String path = "D:/test/1/";
    String fileName = "1.txt";

    // 创建 File 对象表示文件夹
    File dir = new File(path);

    // 如果路径不存在或者不是一个目录,则 mkdirs() 尝试创建多级目录
    if (!dir.exists() || !dir.isDirectory()) {
        if (dir.mkdirs()) { 
            System.out.println("进来创建文件夹");
        } else {
            System.out.println("无法创建文件夹");
            return; // 如果无法创建文件夹,退出程序
        }
    }

    // 创建 File 对象表示文件
    File file = new File(path, fileName);

    try {
        // 如果文件不存在,则创建新文件
        if (!file.exists() || !file.isFile()) {
            if (file.createNewFile()) {
                System.out.println("进来创建文件....");
            } else {
                System.out.println("文件创建失败");
            }
        } else {
            System.out.println("文件已存在");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

流是一组有序的数据序列,以先进先出方式发送信息的通道

在这里插入图片描述

Java流的分类

在这里插入图片描述

输入输出流是相对于计算机内存来说的

在这里插入图片描述

字节流是8位通用字节流,字符流是16位 Unicode 字符流

输入流InputStream

InputStream 类常用方法

int read( )

int read(byte[] b)

int read(byte[] b,int off,int len)

void close( ) // 关闭流 释放资源

int available() // 可以从输入流中读取的字节数目

子类 FileInputStream 常用的构造方法

FileInputStream(File file)

FileInputStream(String name)	

使用 FileInputStream 读文本文件

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.IOException;

public class FileReadExample {
    public static void main(String[] args) {
        InputStream is = null;
        try {
            // 打开文件输入流
            is = new FileInputStream("D:\\4072\\1\\1.txt");
            // 获取文件的字节数
            byte[] b = new byte[is.available()];
            // 读取内容到字节数组
            is.read(b);
            // 将字节数组转换为字符串(使用 GBK 编码)
            String str = new String(b, "GBK");
            // 打印字符串
            System.out.println(str);
        } catch (IOException e) {
            // 捕获并打印异常堆栈
            e.printStackTrace();
        } finally {
            // 关闭输入流并释放资源
            try {
                if (is != null) is.close();
            } catch (IOException e) {
                e.printStackTrace();
}}}}

输出流OutputStream

OutputStream 类常用方法

void write(int c)

void write(byte[] buf)

void write(byte[] b,int off,int len)

void close() // 释放资源

void flush() // 强制把缓冲区的数据写到输出流中

子类 FileOutputStream 常用的构造方法

FileOutputStream(File file)

FileOutputStream(String name)

FileOutputStream(String name,boolean append)

前两种构造方法在向文件写数据时将覆盖文件中原有的内容,append 参数默认为 false

在这里插入图片描述
在这里插入图片描述

创建 FileOutputStream 实例时,如果相应的文件并不存在,则会自动创建一个空的文件

使用 FileOutputStream 写文本文件

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.IOException;

public class FileWriteExample {
    public static void main(String[] args) {
        OutputStream os = null;
        try {
            // 打开文件输出流,并以追加模式写入
            os = new FileOutputStream("p:\\4072\\1\\1.txt", true);
            String msg = "张三";
            // 将字符串转换为字节数组并调用 write 方法进行写入
            os.write(msg.getBytes());
            System.out.println("写入成功......");
        } catch (IOException e) {
            // 捕获并打印异常堆栈
            e.printStackTrace();
        } finally {
            // 关闭输出流并释放资源
            try {
                if (os != null) os.close();
            } catch (IOException e) {
                e.printStackTrace();
}}}}

复制文件内容代码示例:

public static void main(String[] args) {
    InputStream is = null; // 读
    OutputStream os = null; // 写
    try {
        // 打开文件输入流和输出流
        is = new FileInputStream("D:\\4072\\1\\1.txt");
        os = new FileOutputStream("D:\\4072\\1\\2.txt");
        int b;
        // 逐字节读取文件内容并写入到目标文件
        while ((b = is.read()) != -1) {
            os.write(b);
        }
        System.out.println("复制成功!!!!");
    } catch (IOException e) {
        // 捕获并打印异常堆栈
        e.printStackTrace();
    } finally {
        // 关闭输入输出流并释放资源
        try {
            if (is != null) is.close();
            if (os != null) os.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
}}}

标签:文件,OutputStream,Java,String,System,InputStream,file,println,out
From: https://blog.csdn.net/m0_66584716/article/details/142059126

相关文章

  • java加密解密
    kpackagecom.xcg.webapp.common;importjavax.crypto.BadPaddingException;importjavax.crypto.Cipher;importjavax.crypto.IllegalBlockSizeException;importjavax.crypto.NoSuchPaddingException;importjavax.crypto.spec.IvParameterSpec;importjavax.crypt......
  • 2-1Java对象和类
    Java对象和类Java作为一种面向对象语言。支持以下基本概念:多态继承封装抽象类对象实例方法重载本节我们重点研究对象和类的概念。对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等......
  • 基于Java实现的大学生就业服务平台设计与实现(SpringBoot+Vue+MySQL+Tomcat)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.选题推荐毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • 基于Java实现的摄影跟拍预订管理系统设计与实现(SpringBoot+Vue+MySQL+Tomcat)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.选题推荐毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • 基于Java实现的乒乓球预约管理系统设计与实现(SpringBoot+Vue+MySQL+Tomcat)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.选题推荐毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • 基于Java实现的私人健身与教练预约管理系统设计与实现(SpringBoot+Vue+MySQL+Tomcat)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.选题推荐毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • Java 工程解耦即高内聚低耦合
      工程结构和模块不断地从JAVA 的单体应用中分离 。单体应用结构只有一个项目结构,有一 个项目文件包 。 刚开学习计算机JAVA 编程的时候,JAVA 项目分为JAVAEE 和JAVASE. 标 准的JAVA 类库jdk  是基础的JAVA 开发工具箱,没有绑定任何商业开发的工具包 。......
  • Java--面向对象设计原则
    衡量软件设计质量(高内聚,低耦合)可读性可复用性(继承,封装)可扩展性可维护性(更好定位bug,日志)可测试性单一职责原则(SRP)不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发......
  • Java--设计模式
    目录23种设计模式创建型模式结构型模式行为型模式设计模式的本质单例模式工厂模式定义解耦(对象使用过程+对象创建过程)分类简单工厂模式代理模式适配器模式外观模式策略模式23种设计模式创建型模式工厂模式(FactoryPattern)抽象工厂模式(AbstractFactoryPattern)单例模式(S......
  • javaSE初识
    前端:微信客户端  网页三剑客【 HTML(素颜)、CSS(化妆)、JS(行为)】 后端:服务器  帮你处理数据  JavaC++测试   测开:开发一些测试工具运维:保证你的产品时时刻刻安全运行Java的祖师爷--詹姆斯*高斯林Java的特点:一次编译,到处运行跨平台的HelloWorld新建文本......