一、关于IO

IO@mb90543 IO口翻转实验。富士通单片机的HELLO WORLD。 立即下载

1.IO简介

    所谓IO,也就是Input(读、输入)与Output(写、输出)的缩写
    java.io包提供了用于系统的输入和输出,通过数据流,序列化和文件系统。

    IO流分为字节流与字符流






2.File

  概述:java.io.File类是 文件 和目录(文件夹)路径名的抽象表示形式,在java中,不管是文件还是文件夹都是叫做File对象

          File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名,判断指定文件是否存在、

    获得当前目录中的文件列表,创建、删除文件和目录等方法。

  根据一个路径得到File对象:File file = new File("E:\\demo\\a.txt");

 创建目录:

    File类中有两个方法可以用来创建文件夹:

    a.mkdir( )方法创建一个文件夹,成功则返回true,失败则返回false。失败表明File对象指定的路径已经存在,或者由于整个路径还

     不存在,该文件夹不能被创建。

    b.mkdirs()方法创建一个文件夹和它的所有父文件夹。



3.递归

  例子:利用File以及递归算法得到某个路径下所有的文件并打印

package com.zking.io;

import java.io.File;

public class Recursion {
	public static void main(String[] args) {
		   File f=new File("D:\\桌面文件\\桌面\\测试文件夹");//右键属性查看路径
		   read(f);
	}
	
	public static void read(File f){
		   if(f.isDirectory()){//如果是文件夹
			     //列出该文件夹下所有的文件
			     File fs[]=f.listFiles();
			     if(fs.length>0){//有子目录或者子文件
			    	   for (File file : fs) {
						    if(file.isDirectory()){
						    	  read(file);
						    }else{
						    	  System.out.println(file.getAbsolutePath());
						    }
					   }
			     }else{//没有子目录或者子文件
			    	   System.out.println(f.getAbsolutePath());
			     }
		   }else{//如果是文件
			     System.out.println(f.getAbsolutePath());
		   }
	}
	
	
}



4.使用字符流(FileReader、BufferedWriter)和字节流(FileInputStream)读写数据(例子)

   在程序中一个字符等于两个字节,那么java提供了Reader(字符输入流)、Writer(字符输出流)两个专门操作字符流的类。

   字节流与字符流的区别

   字节流和字符流使用是非常相似的,那么除了操作代码的不同之外,还有哪些不同呢?

  字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的 

  字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,

    说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容

/**
 * 需求:
 * 指定一个文件:
 * 	如果这个文件存在,则读取这个文件中的内容
 *      如果这个文件不存在,则写内容到这个文件中
 * 用字节流
 *
 */
public class TestFileByStream {
	public static void main(String[] args) {
		File file=new File("C:\\Users\\Administrator.USER-20170515AI\\Desktop\\test.txt");
		//判断 该文件是否存在
		if(!file.exists()){//不存在:创建文件 写内容
			System.out.println("该文件不存在,正在创建...");
			//创建文件
			try {
				boolean b=file.createNewFile();
				if(b){
					System.out.println("创建成功了...");
					//写内容(字节流 )
					FileOutputStream fos=new FileOutputStream(file);
					fos.write("这是txt文件的内容".getBytes());
					fos.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			//file.mkdir();//创建文件夹
		}else{//存在:读取内容
			System.out.println("该文件存在,文件内容如下:");
			//读
			try {
				FileInputStream fis=new FileInputStream(file);
				byte b[]=new byte[1024];
				int len=0;
				while((len=fis.read(b))!=-1){
					//将字节数组转成字符串
					String s=new String(b, 0, len);
					System.out.println(s);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
	}
}

/**
 * 需求:
 * 指定一个文件:
 * 判断:如果这个文件存在,则读取这个文件中的内容
 *     如果这个文件不存在,则写内容到这个文件中
 * 字符流
 */
public class TestFile {
	   public static void main(String[] args) {
		      File file=new File("test1.txt");//如果没有指定目录,则文件会在项目的跟目录下
			  //判断 该文件是否存在
			  if(!file.exists()){//不存在:创建文件 写内容
					System.out.println("该文件不存在,正在创建...");
					//创建文件
					try {
						boolean b=file.createNewFile();
						if(b){
							System.out.println("创建成功了...");
							//写内容
							FileWriter fw=new FileWriter(file);
							fw.write("文件test1.txt的内容");
							fw.close();
						}
					} catch (IOException e) {
						e.printStackTrace();
					}
					//file.mkdir();//创建文件夹
			   }else{//存在:读取内容
					System.out.println("该文件存在,文件内容如下:");
					//读
					try {
						FileReader fr=new FileReader(file);
						char cbuf[]=new char[1024];
						int len=0;
						while((len=fr.read(cbuf))!=-1){
							//字符数组转成字符串
							String s=new String(cbuf, 0, len);
							System.out.println(s);
						}
					} catch (FileNotFoundException e) {
						e.printStackTrace();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
	}
}



5.缓冲流

     BufferedReader:缓冲字符输入流  读

  BufferedWriter:缓冲字符输出流  写

6.装换流(字节流转成字符流)

/**
 * 转换流
 * 实现文件复制
 * 1.来一个文件(字节流)
 * 2.读文件
 * 3.写文件
 * @author Administrator
 *
 */
public class TestCopyChange {
	public static void main(String[] args) {
		File file=new File("test.txt");
		File fileOut=new File("C:\\Users\\Administrator\\Desktop\\a");
		try {
			//获取字节文件输入流
			FileInputStream fis=new FileInputStream(file);
			//使用字符缓冲输入流
			BufferedReader br=new BufferedReader(new InputStreamReader(fis));
			String s=br.readLine();
			System.out.println(s);
			
			//打印流
			PrintWriter pw=new PrintWriter(file);
			pw.write("新内容");
			pw.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}



7.文件复制(例子)

/**
 * 实现文件复制
 * 1.来一个文件(字节流)
 * 2.读文件
 * 3.写文件
 * @author Administrator
 *
 */
public class TestCopy {
	public static void main(String[] args) {
		File file=new File("视频1.webm");
		File fileOut=new File("C:\\Users\\Administrator\\Desktop\\a");
		try {
			//文件字节输入流(读)
			FileInputStream fis=new FileInputStream(file);
			//文件字节缓冲输入流
			BufferedInputStream bis=new BufferedInputStream(fis,10);
			
			//文件字节输出流(写)
			FileOutputStream fos=new FileOutputStream(fileOut+"\\"+file.getName());
			//文件字节缓冲输出流
			BufferedOutputStream bos=new BufferedOutputStream(fos);
			int len=0;
			byte[] b=new byte[1024];
			//获取系统时间
			long before=System.currentTimeMillis();
			//没有使用缓冲流
//			while((len=fis.read(b))!=-1){
//				//写
//				fos.write(b, 0, len);
//			}
			
			//使用缓冲流
			while((len=bis.read(b))!=-1){
				bos.write(b, 0, len);
			}
			bos.close();
			bis.close();
			long after=System.currentTimeMillis();
			System.out.println("复制OK:"+(after-before));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


8.序列化和反序列化(例子)

//将一个学生对象 序列化 以及 反序列化
public class Temp {
	public static void main(String[] args) throws Exception{
		   /**
		    * 序列化
		    */
            //1.实例化对象	
		    Student stu=new Student(1,"admin","女");

            //2.创建文件保存对象
//		    File f=new File("E:\\test1\\d.txt");
//		    f.createNewFile();//创建文件
//          /**写**/
//	        FileOutputStream fos=new FileOutputStream(f);
//          BufferedOutputStream bos=new BufferedOutputStream(fos);
//          ObjectOutputStream oos=new ObjectOutputStream(bos);
//		    oos.writeObject(stu);//保存到文件
//		    oos.close();//关闭流
//		    bos.close();
//		    fos.close();
//		    System.out.println("保存完毕");
		
		
		   /**
		    * 反序列化:把硬盘的对象读到内存中
		    */
		    File f=new File("E:\\test1\\d.txt");
            /**读**/
	        FileInputStream fis=new FileInputStream(f);
            BufferedInputStream bis=new BufferedInputStream(fis);
            ObjectInputStream ois=new ObjectInputStream(bis);	
		    Object o=ois.readObject();
		    Student s=(Student)o;
		    System.out.println(s);
		    ois.close();//关闭流
		    bis.close();
		    fis.close();
		
		
	}	
}
序列化是将对象状态转换为可保持或传输的格式的过程。
反序列化是将流转换为对象,这两个过程结合起来,可以轻松地存储和传输数据。

序列化:将一个对象从内存当中 转换到介质(存在硬盘上的介质)

反序列化:将对象从介质转换为内存里面的对象的过程称为反序列化



最后,这些知识可以了解下(如有时间,以后会补充)

a.随机文件读写(多线程下载与断点下载)

b.开源库



如果有错误的地方,欢迎大家指出。



TSMC40nmLP版图实战:从Design Rule解读到Cadence高效布局布线 本文详细解析了TSMC40nmLP工艺的版图设计实战,从Design Rule解读到Cadence高效布局布线技巧。重点介绍了40nm工艺中的关键设计规则,如最小线宽、间距规则和深N阱规则,并分享了Cadence Virtuoso中的高效工作流和射频模块设计技巧,帮助工程师提升版图设计效率和质量。 阅读详情

相关推荐

微信小程序利用Echarts加载中国地图的步骤

微信小程序如何利用Echarts加载地图?可按照如下四个步骤进行。(阅读时间大概3分钟)。

成都都成 5274

最常见的十六种IO流

什么是IO? I:input,O:Output 通过IO可以完成硬盘文件的读和写。 IO流的分类: 1、按照流的方向来划分:(以内存作为参照物)往内存中去叫做:输入(Input),或者叫做:读(Read);从内存中和出来叫做:输出(Output),或者叫做:写(Write)。 2、按照读取数据的方式不同划分:按照字节的方式读取数据,一次读取一个字节byte,等同于一次读取8个二进制位,这种流是万能的,什么类型的文件都可以读取;有的流是按照字符的方式读取,一次读取一个字符,这种流是为了方便读取普通文

阿杰的博客 3390

QT日志输出终极指南:从qDebug到qFatal的完整文件记录方案

本文深入探讨了QT日志系统的企业级文件记录方案,从基础的qDebug、qWarning、qCritical、qFatal等宏的使用,到构建自定义消息处理器、实现异步写入、分级存储、日志轮转及性能监控等高级功能。旨在帮助开发者构建一个稳定、高效且易于维护的专业级日志管理架构,适用于桌面应用、嵌入式系统及服务端程序。

ik678901234的博客 909

IO知识整理

IO知识整理 IO分类 异步IO AIO 同步IO NIO、BIO、Signal driven IO、IO multiplexing IO模型 BIO BlockingIO 同步阻塞IO blocking IO的特点就是在IO执行的两个阶段都被block了。 NIO Non-Blocking IO 同步非阻塞IO nonblocking IO的特点是用户进程需要不断的主动询问kernel数据好了没有。 信号驱动IO Signal driven IO 向内核注册一个信号处理函数,sigio信号通知用户态i

baidu_38900596的博客 204

Anaconda安装及配置+pytorch深度学习环境(2024复旦计算机工作站0705)

Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程。Torch 是一个经典的对多维矩阵数据进行操作的张量(tensor )库,在机器学习和其他数学密集型应用有广泛应用。与Tensorflow的静态计算图不同,Pytorch的计算图是动态的,可以根据计算需要实时改变计算图。但由于Torch语言采用 Lua,导致在国内一直很小众,并逐渐被支持 Python 的 Tensorflow 抢走用户。

ZhiYilang的博客 2348

Mac上IDEA的PlantUML插件报错‘找不到Graphviz’?手把手教你用Homebrew搞定(附阿里云镜像避坑)

本文详细解决了Mac上IDEA的PlantUML插件报错‘找不到Graphviz’的问题,通过Homebrew安装Graphviz并配置阿里云镜像源,特别针对Apple Silicon芯片用户提供了优化方案。文章还涵盖了IDEA中PlantUML插件的正确配置和常见问题排查,帮助开发者高效使用PlantUML进行UML图表设计。

weixin_42619742的博客 468

Linux基础IO

基础IO:输入输出---- 学习内容: 回顾标准库IO接口:FILE*----文件流指针 系统调用IO接口学习:int----文件描述符 文件描述符和文件流指针之间的关系 文件描述符到底是什么----凭什么操作文件 文件系统----Linux下的ext2 软链接/硬链接 静态库/动态库:生成+使用 回顾标准库IO接口: fopen fclose fread f...

qq_43780350的博客 302

国产麒麟系统下Kettle安装避坑指南:解决aarch64架构不支持问题

本文详细解析了在国产麒麟系统上部署Kettle时遇到的aarch64架构不支持问题,提供了从获取适配的SWT库、修改启动脚本到生产环境调优的完整解决方案。文章重点解决了ARM架构与Java GUI工具的兼容性挑战,并分享了内存配置、字体显示及Carte服务部署等实战经验,助力用户在国产化环境中稳定运行ETL流程。

weixin_29197835的博客 560

io进程的归纳总结--day01

不同的操作系统只要移植了C库就可以使用,它是在系统调用之前做了一个二次封装,相当于是间接的进行了系统调用。可移植性强,可以在不同的系统环境下进行使用1.1 标准IO调用逻辑(了解)标准IO读写文件if(是linux操作系统)调用linux的系统函数if(是windows操作系统)调用的windows系统函数if(是macos操作系统)调用的macos系统函数。

2403_87205833的博客 1822

【Zotero】《纯操作讲解,GPT配置,Zotero标注可视化》- 知识点目录

Temperature分布在。之间,越低输出越稳定;

墨门 3396

Rust 与 C/C++:Rust 比 C/C++ 更好还是只是“技能问题”?

对于许多嵌入式系统开发人员而言,的崛起似乎掀起了一股不小的浪潮,特别是在相较于传统的语言,Rust的“内存安全”优势让人眼前一亮。然而,是否可以将Rust作为C/C++的替代品?或者说,Rust是否真的比C/C++更好,抑或它只是一个“技能问题”呢?在嵌入式开发的领域,我观察到,尽管Rust在一些高性能、内存安全敏感的场景中受到了广泛推崇,但它在实际应用中的普及度,特别是在嵌入式领域,依然有限。今天,我会从多个角度探讨这个问题,并且分享一些对于Rust、C/C++以及嵌入式系统开发的个人见解。

qq_63315166的博客 1300

什么是IO?有哪些IO类型与模式?

IO是计算机与外界沟通的桥梁,理解其原理和优化方法对开发高效程序(如Web服务器、实时数据处理系统)至关重要。的核心概念,指信息从外部传入系统(Input)或从系统传出到外部(Output)的过程。

ThereIsNoCode 2862

第10章: MMU notifier与HMM的协作

本文摘要: HMM(Heterogeneous Memory Management)是Linux内核提供的异构内存管理框架,用于统一CPU与设备(如GPU、DSP等)的内存访问。它通过镜像页表技术实现虚拟地址空间共享,自动同步CPU和设备页表变化,支持透明的内存迁移和设备内存管理。HMM构建在mmu_interval_notifier机制上,利用序列号检测页表修改冲突,提供高效并发控制。核心数据结构包括hmm_range和HMM PFN标志位,通过hmm_range_fault()实现页表遍历和缺页处理。

图形/计算GPU的驱动与虚拟化技术分享园地 3096

网络io学习理解(一)一请求一线程

网络I/O发展历程:从阻塞I/O到异步I/O的演进 本文系统介绍了网络I/O的发展历程和关键技术。网络I/O主要包括两个阶段:数据从网卡到内核缓冲区,再从内核到用户空间。其发展经历了阻塞I/O、非阻塞I/O、I/O多路复用、信号驱动I/O和异步I/O五个阶段。详细分析了select、poll、epoll等I/O多路复用技术的实现原理和优缺点,其中epoll采用红黑树和事件驱动机制,支持10万级连接。同时介绍了Reactor模式和协程技术,对比了不同I/O模型的性能特点。最后通过socket编程实例,展示了从

weixin_56681821的博客 560

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

网络编程1:一请求一线程网络IO

网络io就是计算机在网络的环境下进行输入和输出操作,这些操作包含:发送请求、接受响应、下载文件、传输数据等。

weixin_42010295的博客 332

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

java的io流有什么作用_Java IO流详解(一)——简单介绍

文件在程序中是以流的形式来传输的。所以用Java来传输文件就得使用到Java IO流。1、流的概念和作用流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象流的本质:数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。作用:为数据源和目的地建立一个输送通道2、Java IO所采用的模型Java的IO模型设计非常优秀,它使用Decorator(装饰者)模式(这篇博...

weixin_33602738的博客 4558

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

一张图解释IO过程

每天进步一点点的专栏 2459

Netty入门之IO(一)

BIO:一请求一应答模型      阻塞同步IO 一个线程去监听客户端链接,当监听到客户端链接时,会为每个客户端创建一个新的线程去进行处理,处理结束,通过输出流返回应答给客户端,最后销毁线程。 缺点:由于会每个客户端请求创建新的线程去处理。所以随着并发量的增加,效率会大大降低。 还有可能出现线程堆栈溢出,创建新线程失败等问题。最终会导致无法提供提供服务。 伪异步IO通信=BIO+线程池   ...

致终将逝去的编程青春 287

【Linux基础IO】一、系统IO

​ 我们知道 C语言有文件操作接口,那么当然 C++、JAVA这些语言都有文件操作接口。但是最让人烦的问题是这些语言之间的 IO接口都是不一样的,这样子导致我们学习成本很高!​ 这些语言拥有文件操作接口的目的找到文件,然后对文件进行操作。那么文件是在磁盘上,磁盘是属于硬件。对于硬件的访问只有操作系统才能进行。所有人想访问磁盘都不能绕开操作系统,C语言也好,其他语言也罢都是人表达出意思让操作系统理解我们想要干嘛,所以任何上层语言想要进行对磁盘进行操作,都会使用操作系统提供的接口。

lirendada的博客 1094

IO模型一网络IO

我们致力研究的IO模型都是网络IO五种IO模型blocking IO 阻塞IOnonblocking 非阻塞IOIO multiplexing IO多路复用signal driven IO 信号驱动IO(不常用)asynchronous IO 异步IO常见的网络阻塞状态。

timidns的博客 329

【linux高级IO(一)】理解五种IO模型

本篇文章讲解了五种常见的IO模型: 阻塞IO,非阻塞IO,信号驱动IO, 多路转接, 异步IO.

杭电码农-NEO的博客 6358

IO模型《一》IO模型介绍

IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步、异步、阻塞、非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。...

weixin_30378311的博客 90

一、IO系列——五种IO模型

一、五种IO模型(操作系统级别,非某一门语言): 阻塞IO(blocking IO): 应用调用系统函数recvfrom直到获得数据; 非阻塞IO(non-blocking IO): 应用循环调用系统函数recvfrom,未获取数据直接返回,直到获取数据,间隙时间可以处理其他业务; IO多路复用(IO multiplexing): 应用使用单线程先调用系统函数select阻塞监控(实际为系统级别的轮询访问是否准备就绪)多个网络请求,任何请求有数据则再调用系统函数recvfrom去获取数据

划船一哥的博客 985

一、IO简介

IO简介 1 什么是IO ​ 对于任何程序设计语言而言,输入输出(Input/Output)系统都是非常核心的功能。程序运行需要数据,数据的获取往往需要跟外部系统进行通信,外部系统可能是文件、数据库、其他程序、网络、IO设备等。外部系统比较复杂多变,那么我们有必要通过某种手段进行抽象、屏蔽外部的差异,从而实现更加便捷的编程。 ​ 输入(Input)指的是可以让程序从外部系统获得数据(核心含义是“读”,读取外部数据) 常见的应用: 读取硬盘上的文件到程序。例如:播放器打开一个视频软件、word打开一个doc

Suntrumpl的博客 663

IO(一)

IO流概述 1.什么是IO 我们把数据的传输,可以看作是一种数据的流动,按照流动的方向,以内存为基准,分为输入input 和输出output,即流向内存是输入流,流出内存是输出流。 java中I/O操作主要是指使用java.io包下的内容,进行输入,输出操作,输入也可以叫做读取数据,输出也可以叫做写出数据。 2.IO的分类 根据数据的流向分为:输入流和输出流。 输入流:把数据从其他设备上读取到...

程序缘 236

网络IO的处理方法(一)

(2)在内核中,select/poll在检测IO事件时,只要有一个fd有事件发生,就会线性扫描所有的fds,时间复杂度O(n)(遍历到最大的maxfd);(1) 每次调用select/poll时都需要在用户态/内核态之间拷贝事件数据。第3个参数,可写集合;第4个参数,出错的集合。poll面向的是网络IO(后面再说)。(1)maxfd的作用:就是后面用来对fd_set集合做遍历的最大值。(3)第5个参数,timeout,为NULL代表一直阻塞。(4)返回值,返回就绪的总数量。(3)select 的参数太多。

qq_33239372的博客 151
上一篇: 查看csdn自己收藏的文章
下一篇: 二、关于集合
_北冥有鱼_
博客等级 码龄10年 41粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值