java中的字节流和File类

目录

正文:

1.File类

1.1概述

1.2常用方法

2.FileInputStream

2.1概述

2.2常用方法

3.FileOutputStream

3.1概述

3.2常用方法

总结:


正文:

1.File类

1.1概述

File类是Java中用来表示文件或目录的类,它提供了一系列方法来操作文件和目录。但File类并不是一个真正的文件对象,它只是一个用于操作文件的引用。它允许你访问和修改文件的属性,如名称、路径、权限等,以及执行一些基本的文件操作,如创建、删除、移动文件或目录

1.2常用方法

构造方法:File类提供了多种构造方法来创建File对象:

  1. File(String pathname):根据给定的路径名创建一个新File对象。
  2. File(String parent, String child):根据父路径和子路径创建一个新File对象。
  3. File(File parent, String child):根据父File对象和子路径创建一个新File对象。

exists():检查指定的文件或目录是否存在。

boolean exists = file.exists();

isFile():检查指定的路径是否指向一个文件。

boolean isFile = file.isFile();

isDirectory():检查指定的路径是否指向一个目录。

boolean isDirectory = file.isDirectory();

delete():删除文件或目录。如果文件是目录,则只有当它为空时才能被删除。

boolean deleted = file.delete();

mkdir():创建文件指示的目录。

boolean created = file.mkdir();

mkdirs():创建文件指示的目录,包括任何必需但不存在的父目录。

boolean created = file.mkdirs();

renameTo(File dest):将文件重命名为指定的目标文件。如果目标是一个目录,则原文件将被移动到该目录下。

File dest = new File("path/to/new/location"); boolean renamed = file.renameTo(dest);

listFiles():列出当前目录下的文件和子目录。

File[] files = file.listFiles();
for (File f : files) {System.out.println(f.getName());
}

length():返回文件的长度,如果表示的是一个目录,则返回0L。

long size = file.length();

getAbsolutePath():返回文件的绝对路径。

String path = file.getAbsolutePath();

getPath():返回文件的路径名字符串。

String path = file.getPath();

getName():返回由父目录的路径分隔符分隔的文件名。

String name = file.getName();

lastModified():返回文件的最后一次修改时间。

long time = file.lastModified();

setLastModified(long time):设置文件的最后一次修改时间。

boolean modified = file.setLastModified(System.currentTimeMillis());

setReadOnly():将文件设置为只读。

boolean readOnly = file.setReadOnly();

canRead():检查应用程序是否有权限读取此文件。

boolean canRead = file.canRead();

canWrite():检查应用程序是否有权限修改此文件。

boolean canWrite = file.canWrite();

下面给几个代码示例来加深理解

普通文件的创建,删除示例

import java.io.File;
import java.io.IOException;public class test {public static void main(String[] args) throws IOException {//当前文件并不存在File file = new File("hello-world.txt");System.out.println(file.exists());System.out.println(file.isDirectory());System.out.println(file.isFile());System.out.println(file.createNewFile());System.out.println(file.exists());System.out.println(file.isDirectory());System.out.println(file.isFile());System.out.println(file.createNewFile());}
}

这段代码需要注意的是,调用File的构造方法并不会创建出这个文件,只是创建出文件的引用即使这个文件并不存在,调用crateNewFile后才真正有了文件。

运行结果:

 

 目录创建示例:

import java.io.File;
import java.io.IOException;public class test {public static void main(String[] args) throws IOException {//该文件并不存在File dir = new File("some-parent\\some-dir");System.out.println(dir.isDirectory());System.out.println(dir.isFile());System.out.println(dir.mkdir());System.out.println(dir.isDirectory());System.out.println(dir.isFile());}
}

mkdir() 的时候,如果中间目录不存在,则无法创建成功; mkdirs() 可以解决这个问题。

运行结果为:

 

2.FileInputStream

2.1概述

字节输入流(InputStream)是Java中用于从输入源读取字节数据的抽象类。它是所有字节输入流类的超类,提供了一系列方法来读取字节数据。FileInputStream是字节输入流的一种,用于从文件中读取字节数据。它继承自InputStream类,并提供了一系列方法用于读取文件中的数据。

2.2常用方法
  1. 构造方法:

    • FileInputStream(String name):根据指定的文件名创建FileInputStream对象。
    • FileInputStream(File file):根据指定的File对象创建FileInputStream对象。
  2. 读取数据方法:

    • int read():从输入流中读取下一个字节的数据,返回读取的字节(0-255),如果到达文件末尾则返回-1。
    • int read(byte[] b):从输入流中最多读取b.length个字节的数据到字节数组b中,返回实际读取的字节数。
    • int read(byte[] b, int off, int len):从输入流中最多读取len个字节的数据到字节数组b中,从数组的off位置开始存储,返回实际读取的字节数。
  3. 其他方法:

    • long skip(long n):跳过n个字节的数据,返回实际跳过的字节数。
    • int available():返回剩余可读取的字节数。
    • void close():关闭输入流并释放与之关联的资源。

使用FileInputStream的一般步骤如下:

  1. 创建FileInputStream对象,指定要读取的文件。
  2. 使用read()方法读取文件中的数据,可以逐字节读取或读取到字节数组中。
  3. 处理读取的数据。
  4. 关闭FileInputStream对象,释放资源。

代码示例:

import java.io.InputStream;
import java.io.FileInputStream;
import java.io.IOException;public class InputStreamExample {public static void main(String[] args) {// 尝试打开一个文件输入流try (InputStream in = new FileInputStream("example.txt")) {byte[] buffer = new byte[1024];int bytesRead;// 循环读取数据直到文件结束while ((bytesRead = in.read(buffer)) != -1) {// 将读取的字节转换为字符串String readData = new String(buffer, 0, bytesRead);System.out.println(readData);}} catch (IOException e) {e.printStackTrace();}}
}

注意事项

  • InputStreamread()方法可能会抛出IOException,因此在读取数据时需要进行异常处理。
  • 使用try-with-resources语句可以确保InputStream在使用完毕后被正确关闭,避免资源泄露。
  • 读取操作是阻塞的,如果读取到流的末尾,read()方法将返回-1。
  • available()方法返回的是一个估计值,实际可读取的字节数可能会更少。
  • FileInputStream是以字节为单位进行读取的,因此无法直接处理中文字符。当使用FileInputStream读取包含中文的文件时,需要将字节数据转换为字符数据。

3.FileOutputStream

3.1概述

Java中的输出流是用于将数据从Java程序发送到外部目的地的I/O流。OutputStream是所有字节输出流的抽象类,定义了写入字节数据的基本方法。FileOutputStream是Java中用于向文件写入数据的输出流类。它继承自OutputStream类,是字节输出流的一种。FileOutputStream可以用来写入字节数据到文件中,可以创建新文件或覆盖已有文件的内容。

3.2常用方法
  1. 构造方法:

    • FileOutputStream(String name):根据指定的文件名创建FileOutputStream对象。如果文件不存在,则会创建新文件;如果文件已存在,则会覆盖原有内容。
    • FileOutputStream(String name, boolean append):根据指定的文件名和追加标志创建FileOutputStream对象。如果append为true,则会在文件末尾追加数据;如果为false,则会覆盖原有内容。
    • FileOutputStream(File file):根据指定的File对象创建FileOutputStream对象。
  2. 常用方法:

    • void write(int b):将指定的字节写入文件。
    • void write(byte[] b):将字节数组b中的数据写入文件。
    • write(byte[] b, int off, int len):写入字节数组的一部分,从偏移量 off 开始,长度为 len。
    • void close():关闭输出流并释放资源。

示例代码:

import java.io.FileOutputStream;
import java.io.IOException;public class FileOutputStreamExample {public static void main(String[] args) {String content = "Hello, World!";String fileName = "example.txt";try (FileOutputStream fos = new FileOutputStream(fileName)) {// 将字符串转换为字节并写入文件fos.write(content.getBytes());System.out.println("Data written to " + fileName);} catch (IOException e) {e.printStackTrace();}}
}

这段代码实现了将字符串内容"Hello, World!"写入到文件"example.txt"中的功能。通过FileOutputStream的write方法,将字符串转换为字节数组并写入文件。

注意事项

  • 使用 FileOutputStream 写入文件时,如果文件不存在,它会自动创建文件;如果文件已存在,它将覆盖文件内容,除非在构造方法中指定 append 参数为 true
  • FileOutputStream 的写入方法是阻塞的,意味着在所有数据被写入之前,调用线程将被阻塞。
  • 必须处理 IOException,因为写入操作可能会失败,例如,如果设备已满或访问被拒绝。
  • 使用 try-with-resources 语句可以确保 FileOutputStream 在使用完毕后被正确关闭,即使发生异常也是如此。
  • 如果需要写入字符数据,应使用 Writer 类(如 FileWriter),因为 FileOutputStream 只能处理字节数据。

总结:

File类用于文件和目录的管理,FileInputStream用于从文件中读取字节数据,FileOutputStream用于向文件写入字节数据。这三个类在文件操作中扮演着不同的角色,分别用于文件的元数据操作、读取数据和写入数据。在文件处理中,这三个类通常会结合使用,实现对文件的完整操作。

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

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

相关文章

【项目学习01_2024.05.02_Day04】

学习笔记 4 课程分类查询4.1需求分析4.2 接口定义4.3 接口开发4.3.1 树型表查询4.3.2 开发Mapper 4 课程分类查询 4.1需求分析 有课程分类的需求 course_category课程分类表的结构 这张表是一个树型结构,通过父结点id将各元素组成一个树。 利用mybatis-plus-gen…

Sass语法---sass的安装和引用

什么是Sass Sass(英文全称:Syntactically Awesome Stylesheets) Sass 是一个 CSS 预处理器。 Sass 是 CSS 扩展语言,可以帮助我们减少 CSS 重复的代码,节省开发时间。 Sass 完全兼容所有版本的 CSS。 Sass 扩展了…

centos7安装真的Redmine-5.1.2+ruby-3.0.0

下载redmine-5.1.2.tar.gz,上传到/usr/local/目录下 cd /usr/local/ tar -zxf redmine-5.1.2.tar.gz cd redmine-5.1.2 cp config/database.yml.example config/database.yml 配置数据连接 #编辑配置文件 vi config/database.yml #修改后的内容如下 product…

【介绍下Apache的安装与目录结构】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

Vitis HLS 学习笔记--MAXI手动控制突发传输

目录 1. 简介 2. MAXI 突发传输详解 2.1 突发传输的前置条件 2.2 hls::burst_maxi 详解 2.2.1 基本知识 2.2.2 hls::burst_maxi 构造函数 2.2.3 hls::burst_maxi 读取方法 2.2.4 hls::burst_maxi 写入方法 2.3 示例一 2.4 示例二 3. 总结 1. 简介 这篇文章探讨了在…

Python版本管理工具-pyenv

Pyenv是一个Python版本管理工具。 Pyenv允许用户在同一台机器上安装多个版本的Python,并能够轻松切换使用这些版本。 一、安装 Mac下直接使用Homebrew安装 # 更新 Homebrew 的软件列表 brew update # 安装pyenv brew install pyenv# 验证是否安装成功 pyenv -v# …

解锁工业场景下的时序因果发现,清华阿里巴巴伯克利联合提出RealTCD框架:通过大语言模型提升发现质量!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! LLM-Enhanced Causal Discovery in Temporal Domain from Interventional Data 引言:AI在信息技术运营中的革命性应用 在现代信息技术运营&#…

远程链接linux

远程连接 ssh 远程登录操作,ssh会对用用户进行身份信息的验证,会对两台主机之间发通信数据进行加密 安装 ssh 远程登录的服务端 yum install -y openssh-server启动 ssh 服务 systemctl start ssh.service 关闭 ssh 服务 systemctl stop ssh.service …

java发送请求2次开发-get请求json

因为你请求参数不为空,接口都会把这个参数带上 所以借鉴HttpPost类 继承这个类, 这个类是可以带消息的 httpgetwithentity,httpget请求带上消息 复写 构造方法复制过来进行使用 二次开发类让其get请求时可以发送json

基于大爆炸优化算法的PID控制器参数寻优matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于大爆炸优化算法的PID控制器参数寻优matlab仿真。对比优化前后的PID控制输出。 2.系统仿真结果 3.核心程序与模型 版本:MATLAB2022a .....................…

测试腾讯云的高防CC抵御了攻击

网站需要安装防止CC攻击,因为CC攻击是一种常见的网络攻击,它会对网站造成严重的影响。 CC攻击(Cybercrime Control)是指向网站发起大量虚假请求的攻击,目的是使网站的资源耗尽,无法正常运行。CC攻击与DDoS…

python-pytorch官方示例Generating Names with a Character-Level RNN的部分理解0.5.03

pytorch官方示例Generating Names with a Character-Level RNN的部分理解 模型结构功能关键技术模型输入模型输出预测实现 模型结构 功能 输入一个类别名和一个英文字符,就可以自动生成这个类别,且以英文字符开始的姓名 关键技术 将字符进行one-hot编…

通过符号程序搜索提升prompt工程

原文地址:supercharging-prompt-engineering-via-symbolic-program-search 通过自动探索​​大量提示变体来找到更好的提示 2024 年 4 月 22 日 众所周知,LLMs的成功在很大程度上仍然取决于我们用正确的指导和例子来提示他们的能力。随着新一代LLMs变得越…

JAVA面试题---WEB部分

网络通讯 TCP与UDP TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、 可靠的、 基于 IP 的传输层协议。 UDP 是 User Datagram Protocol 的简称,中文名是用户数据报协议,是 OSI 参考模 型中的传输层协议,它是…

【杂谈】记录代码中遇到的问题(持续更新中)

写代码时经常遇到各种各样的bug,有时候很难发现,下面是我自己的一些见解 1.数组开在全局区和栈区所能开到的最大范围是不一样的 main函数里的数组,范围最大可以开到1e5 全局区的函数最大可以开到1e8的范围 2.#define int long long 写#dein…

【Linux】常用命令大揭秘,轻松驾驭终端世界

常见命令大全 概念1.1:开源、闭源的区别1.2:应用场景 发行版XShell3.1:使用XShell登入主机3.2:普通用户的增加、删除3.3:查看账户的信息whoami指令who指令 文件和目录基本命令4.1:指令的周边知识文件路径Li…

css响应式布局左、右上、右中布局

一、布局效果 二、布局代码 <div class"parent"><div class"left">菜单</div><div class"right"><div class"right-top">顶部导航</div><div class"right-content"></div>…

一个C++小程序调试过程记录

Top 20 C Projects With Source Code [2024 Update]https://www.interviewbit.com/blog/cpp-projects/ 这个网页有一些简单的C程序的源码&#xff0c;闲来无事&#xff0c;把第一个程序&#xff08;Bookshop Management System Using C&#xff09;的源码下载了下来。 源文件…

Mybatis进阶(映射关系多对一 )

文章目录 1.需求分析2.应用实例&#xff08;xml配置&#xff09;1.数据表设计2.entity设计&#xff08;不要使用toString会栈溢出&#xff09;1.Pet.java2.User.java 3.编写Mapper1.PetMapper.java2.UserMapper.java 4.编写Mapper.xml1.UserMapper.xml2.PetMapper.xml 5.测试Us…

基于缓存注解的时间戳令牌防重复提交设计

文章目录 一&#xff0c;概述二&#xff0c;实现过程1、引入pom依赖2、定义缓存管理3、时间戳服务类4、模拟测试接口 三&#xff0c;测试过程1&#xff0c; 模拟批量获取2&#xff0c; 消费令牌 四&#xff0c;源码放送五&#xff0c;优化方向 一&#xff0c;概述 API接口由于…