输入和输出处理

news2024/12/24 9:10:19

目录

1.File类

2.流

2.1.InputStream

2.2.OutputStream

总结


内容仅供学习交流,如有问题请留言或私信!!!!!

有空您就点点赞


1.File类

文件:相关记录或存放在一起的数据的集合

Java程序如何访问文件属性?

        Java API:java.io.File类

File类访问文件属性:

File类的常用方法

方法名称说明

boolean exists( )

判断文件或目录是否存在

boolean isFile( )

判断是否是文件

boolean isDirectory( )

判断是否是目录

String getPath( )

返回此对象表示的文件的相对路径名

String getAbsolutePath( )

返回此对象表示的文件的绝对路径名

String getName( )

返回此对象表示的文件或目录的名称

boolean delete( )

删除此对象指定的文件或目录

boolean createNewFile( )

创建名称的空文件,不创建文件夹

long  length()

返回文件的长度,单位为字节, 如果文件不存在,则返回 0L

测试:

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

//文件操作:文件创建,获取文件相关信息,删除文件
public class FileDemo {
	// 创建文件
	public void create(File file) {
		if (!file.exists()) {
			// 如果文件不存在,则创建
			try {
				file.createNewFile();
				System.out.println("文件已创建!");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	// 获取文件信息
	public void showFileInfo(File file) {
		if (file.exists()) {
			if (file.isFile()) {
				// 是文件
				System.out.println("文件名称:" + file.getName());
				System.out.println("文件相对路径:" + file.getPath());
				System.out.println("文件绝对路径:" + file.getAbsolutePath());
				System.out.println("文件大小为:" + file.length() + "个字节");
			}
			if (file.isDirectory()) {
				// 是目录
				System.out.println("此文件是目录!");
			}
		} else {
			System.out.println("此文件不存在!");
		}

	}

	// 删除文件
	public void delete(File file) {
		if (file.exists()) {
			file.delete();
			System.out.println("文件已删除!");
		}
	}

	// 测试方法
	public static void main(String[] args) {
		FileDemo fileDemo = new FileDemo();
		File file = new File("E:\\eclipse_workspaces\\testDemo\\test.txt");//绝对路径
		//File file = new File("test.txt");//相对路径
//		fileDemo.create(file);
//		fileDemo.showFileInfo(file);
		fileDemo.delete(file);//删除文件
	}
}

2.流

如何读写文件?

  • 通过流来读写文件
    • 流是一组有序的数据序列
    • 先进先出的方式发送信息的通道

Java流的分类

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

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

2.1.InputStream

InputStream与FileInputStream

  • InputStream类常用方法(抽象类-基类)
    • int read( )
      • 从输入流一个字节一个字节的读,返回的是该字节的整数表示形式,如果读到了输入流的末尾。返回 -1。
    • int read(byte[ ] b)
      • 从输入流读取若干字节,把这些字节保存到数组b中。返回的是读取到的字节数,,如果读到了输入流的末尾,返回-1。
    • int read(byte[ ] b , int off , int len)
      • 从输入流读取若干字节,把这些字节保存到数组b中。off指的是字节数组中开始保存数据的起始下标。len指的是读取的字节数目。返回的是实际读取到的字节数,如果读到了输入流的末尾,返回-1。
    • void close( )
      • 关闭输入流
    • int available( )
      • 可以从输入流中读取的字节数目
  • 子类FileInputStream常用的构造方法
    • FileInputStream(File file)
    • FileInputStream(String name)

使用FileInputStream读文本文件操作步骤:

  1. 引入相关的类

    import java.io.IOException;

    import java.io.FileInputStream;

  2. 狗杂走文件输入流-FileInputStream对象

    FileInputStream fis= new FileInputStream("c:\\test.txt");

  3. 读取文本文件的数据

    fis.available();

    fis.read();    

  4. 关闭文件流对象

     fis.close();

代码演示:

//1.引入资源

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

//通过字节输入流完成对文件的读操作
public class FileInputStreamDemo {

	public static void main(String[] args) {
		FileInputStream fis = null;
		try {

			// 2.创建FileInputStream对象
			fis = new FileInputStream("E:\\eclipse_workspaces\\testDemo\\test.txt");
			System.out.println("可以读取到的字节数:" + fis.available());

			// 3.借助FileInputStream对象的read()方法读取文件
//			int data;	//读取到的每个字节的整数表示形式    比如 和--104
//			while ((data = fis.read()) != -1) {
//				System.out.print((char) data);
//			}
			// 借助借助FileInputStream对象的read(byte[])方法读取文件
			byte[] b = new byte[1024];
			int data;// 读取到的字节数
			while ((data = fis.read(b)) != -1) {
				//字节读取到了字节数组b中,需要循环输出b的内容
				for (int i = 0; i < data; i++) {
					System.out.print((char)b[i]);
				}
			
			}

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 4.关闭输入流

			try {
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

}


2.2.OutputStream

OutputStream与FileOutputStream

  • OutputStream类常用方法(抽象类-基类)
    • white(int):
      • 往输入流中写入一个个的字节。
    • write(byte[] buf)
      • 往输入流中写入一个字节数组。
    • write(byte[] b,int off,int len)
      • 往输入流中写入一个字节数组,off代表开始从字节数组的off位置开始往外写,len代表往外写len长度的字节。
    • void close( )
      • 关闭输出流。
    • void flush()
      • 强制把缓冲区的数据写到输出流中
  • 子类FileOutputStream常用的构造方法
    • FileOutputStream(File file)
    • FileOutputStream(String name)
    • FileOutputStream(String name,boolean append)
  1. 前两种构造方法在向文件写数据时将覆盖文件中原有的内容。
  2. 创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件

使用FileOutputStream读文本文件操作步骤:

  1. 引入相关的类

    import java.io.IOException;

    import java.io.FileOutputStream;

  2. 狗杂走文件输入流-FileInputStream对象

    FileOutputStream fos = new FileOutputStream("text.txt");

  3. 读取文本文件的数据

    String str ="好好学习,天天向上!";

    byte[] words  = str.getBytes();

    fos.write(words, 0, words.length);

  4. 关闭文件流对象

     fos.close();

代码演示:

//1.引入资源

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

//通过字节输出流完成对文件的读操作
public class FileOutputStreamDemo {

	public static void main(String[] args) {
		FileOutputStream fos = null;
		try {
			// 2.创建字节输出流对象(FileOutputStream)
			//fos = new FileOutputStream("E:\\eclipse_workspaces\\testDemo\\test.txt");
			//不覆盖原有的内容。进行追加
			fos = new FileOutputStream("E:\\eclipse_workspaces\\testDemo\\test.txt",true);
			
			// 3.调用字节输出流对象(FileOutputStream)的write()方法写入文件
			String infoString = "好好学习,天天向上!";
			// 将写入的字符串打散为一个字节数组
			byte[] infos = infoString.getBytes();
			fos.write(infos, 0, infos.length);
			System.out.println("test文件已被更新!");

		} catch (FileNotFoundException e) {

			e.printStackTrace();
		} catch (IOException e) {

			e.printStackTrace();
		}finally {
			// 4.关闭输出流
			try {
				fos.close();
			} catch (IOException e) {
			
				e.printStackTrace();
			}
		}

	}

}


2.3.Reader

  • 字符输入流Reader类常用方法(基类-抽象类)
    • int read()
    • int read(char[ ] c)
    • int read(char[ ] ,int off ,int len)
    • void close()
  • File类是Reader类的孙子类
    • FileReader (File file)
    • FileReader (String name)
  • FileReader读取文件
    • 引入资源
    • 创建FileReader对象
    • 调用相应read()读取文件(文件操作)
    • 关闭字符流

解决中文乱码问题:

  1. 手动调整
  2. 通过流读取时设置编码格式
    1. InputStreamReader(InputStream in) 
    2. InputStreamReader(InputStream in,String charsetName) 

2.4.BufferedReader

       如何提高字符流读取文本文件的效率:使用FileReader类与BufferedReader类

         BufferedReader类是Reader类的子类,BufferedReader带有缓冲区,内有按行读取内容的readLine()方法。

BufferedReader:

  •  带有缓冲区的字符输入流
  •  提高了文件的读取效率

-------------------------------------------------------------------------------------------------------------

  • BufferedReader类常用的构造方法
    • BufferedReader(Reader in)
  • 子类BufferedReader特有的方法
    • readLine()

使用BufferedReader读文本文件的操作步骤:

  1. 引入相关的类

    import java.io.FileReader;

    import java.io.BufferedReader;

    import java.io.IOException;

  2. 构造 BufferedReader 对象和 FileReader 对象

    Reader fr = new  FileReader("C:\\myTest.txt ");

    BufferedReader br=new BufferedReader(fr);

  3. 调用 readLine()方法读取数据

    ​​​​​​br.readLine();​​​​​​​​​​​​​​

  4. 关闭文件流对象

    ​​​​​​​br.close();

    fr.close();


 


总结

        练习:这里写练习及链接等。

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

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

相关文章

高考考了657分想重新复读一年,又害怕白费一年

高考考了657分想重新复读一年&#xff0c;又害怕白费一年。 如果你想重新复读一年&#xff0c;可能需要考虑到以下几点&#xff1a; 复读的代价&#xff1a;复读需要花费一年的时间和精力&#xff0c;而且这个过程中你可能会面临很多挑战和压力&#xff0c;包括学习上的、生活上…

多模态之论文笔记BEiT, BEiT V2, BEiT V3

文章目录 OverviewBEiT1.0. Summary1.1. BEiT VS BERT2.1. Two Views: visual tokens2.1. Two Views: image patches3. Results BEiT V21.0. Summary1.1. Motivation2.1. Methods -- VQ-KD2.2. Methods -- patch aggregation3.1. Results -- image classification & semant…

ChatGPT Plugins内幕、源码及案例实战(二)

第6章 ChatGPT Plugins内幕、源码及案例实战 检索插件的API需要以下环境变量才能工作,如表6-2所示。 ChatGPT检索插件示例中,“.well-known”目录里面的ai-plugin.json是一个插件的说明文档,插件名为Retrieval Plugin,用于搜索用户的文档(如文件、电子邮件等),该插件…

HDLbits--Exams/review2015 fsm

示例&#xff1a; 题目的主要意思是&#xff1a;复位之后寻找1101序列&#xff0c;找到之后shift ena在四个周期内为1&#xff0c;此后输出counting&#xff0c;如果done-counting0&#xff0c;则counting一直为1&#xff0c;直到done-counting1&#xff0c;counting才为0&…

Redis高可用——持久化

Redis高可用——持久化 一、Redis 高可用的相关知识1、什么是高可用2、Redis的高可用技术3、持久化的功能4 redis持久化的方式 二、RDB持久化1、RDB持久化的触发方式①.手动触发②.自动触发③.其他自动触发机制 2、bgsave执行流程3、启动时加载 三、AOF持久化1.开启AOF2.执行流…

RSUYZM9智能路侧终端使用说明书

1 产品概览 本说明 书适用于 RSUYZM8型及 RSUYZM9型智能路侧终端 产品 。智能路 侧终端 作为智能 车路协同系统 路侧的基础 设备&#xff0c; 是车载设备和路口 所有 设备的 汇 聚点&#xff0c;路侧设备和车载之间 通过 LTE-V进行 信息交互 。同时 &#xff0c;智能路侧终 端还…

【JavaWeb】JavaScript的基础语法

目录 1、JS简介 1.1、JavaScript的运行过程 1.2、了解浏览器的开发人员工具 2、JavaScript的书写形式 2.1、行内式 2.2、内嵌式 2.3、外部式 3、JavaScript的输入输出函数 4、JavaScript语法 4.1、变量声明 4.1.1、动态类型 4.2、基本数据类型 4.2.1、数字类型 4.…

青岛大学_王卓老师【数据结构与算法】Week03_13_线性表的链式表示和实现13_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c;另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础–…

C++数据结构笔记(6)栈的链式存储结构

对于栈的链式存储结构&#xff0c;实现原理本质上是受限的链表&#xff1b;此外与顺序存储不同的是&#xff0c;链式结构选用左边&#xff08;头结点&#xff09;作为栈的顶部&#xff0c;这样的好处是只要找到头结点即可实现插入元素等操作。 LinkStack.h头文件 #ifndef LIN…

CentOs7 64位 32位ISO镜像下载

链接: https://pan.baidu.com/s/1N181e6KFFFWPHhCTB7thMw 提取码: zht1

<Oracle>《(史上最完整)Linux 下安装Oracle数据库 - Oracle 19C By CentOS 8 》

《Linux 下安装Oracle数据库 - Oracle 19C By CentOS 8 》 1 说明1.1 前言1.2 资源下载 2 安装步骤2.1 上传安装包2.2 下载数据库预安装包2.3 安装数据库预安装包2.4 安装Oracle数据库2.4.1 第一次安装报错2.4.2 解决安装报错第一步&#xff1a;安装libnsl.so.1第二步&#xff…

MATLAB 层次分析法

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

文件上传靶场upload-labs通关

文章目录 前言Pass-01&#xff08;JavaScript绕过&#xff09;Step1、分析源码Step2、修改webshell文件后缀名Step3、修改报文重新发送Step4、使用webshell程序测试是否能连接 Pass-02&#xff08;MIME-Type绕过&#xff09;Step1、分析源码Step2、burp抓包&#xff0c;修改数据…

docker启动springboot项目构建的镜像 并通过Nginx配置反向代理

1.首先准备好springboot项目构建的docker镜像 如果不会的去看我另一篇博客 docker构建springboot项目镜像 docker image list |grep alice2.通过命令启动镜像 注意: -p后面的端口号 前面可以随便写:后面必须是你springboot项目中application.yml的端口,不然 你启动起来 访问…

进阶(组件通讯)/react生命周期

如果是数值就在外面加{} 给组件传递任意类型数据 父子组件数据传递 兄弟组件传递 context的使用(多级嵌套) children属性 props校验 默认值 生命周期

通用分页详解【下】

目录 前言 一、通用分页的核心思想 二、PageBean的分页要素及优化 三、SQL的通用 1.获取总记录数 2.获取分页语句 四、PageTag的核心逻辑见解 五、运行流程 案例运用 注意&#xff1a; 1.pageBean优化 2.tld文件 3.分页标签助手类 4.Servlet层 5.jsp页面 6.结果输…

一款IP合并和分解工具(二)

本文是对上一篇文章的补充&#xff0c;看过《一款IP合并和分解工具&#xff08;一&#xff09;》的知道&#xff0c;cidr-merger工具在windows上使用需要用命令行&#xff0c;不是很方便&#xff0c;在这通过python的tkinter进行二次开发&#xff0c;写一个可视化的界面 目录 …

2bit反射型超表面设计

1.单patch扫参 1&#xff09;确定单元周期&#xff08;最好0.3波长到0.5波长&#xff09; 2&#xff09;确定介质介电常数。&#xff08;小一点比较好&#xff0c;带比较宽&#xff0c;一般选F4B2.65&#xff09; 3&#xff09;确定介质板厚度。厚一点好&#xff0c;最大3mm&a…

乱七八糟随便记录

建立Statement对象的作用是&#xff1f; 正确答案: C 你的答案: C (正确) A.连接数据库 B.声明数据库 C.执行SQL语句 D.保存查询结果 解释&#xff1a; 1、Statement对象用于执行不带参数的简单SQL语句。 2、Prepared Statement 对象用于执行预编译SQL语句。 3、Callable Sta…

react总结

一、React 入门 1.1 特点 高性能、声明式、组件化、单向响应的数据流、JSX扩展、灵活 1.2 React初体验 <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&quo…