I/O系统 (输入/输出)
I/O系统
1:流:
(1)判断到底是输入,还是输出;永远站在程序的立场上;
(2)判断传递的到底是字节还是字符,从而决定管道的粗细;
字节管道可以传递所有数据,字符管道专门用来传递文本数据(1个字符等于2个字节)

2:java流四大父类:
流的分类:字符流;字节流(对象流)
字节流(用于输出文件、影音等存储较大的输出方式“2进制输出全类型”,尽量不传输文本文件,):
InputStream(输入)确定输入是字节管道,InputStream子类前面的单词作为节点(File:是文件的意思,作为数据源输出),通过查阅API文档;
OutputStream(输出)确定输入是字节管道,OutputStream子类前面的单词作为节点(File:是文件的意思,作为数据源输入),通过查阅API文档;
字符流(用于输出文本文件等存储较小的输出方式):
Reader(输入)
Writer(输出)
输入流与输出流
输入:InputStream、Reader
输出:OutputStream、Writer
提供父类,为所有的子类提供方法
只要输入输出,就会伴随异常出现,不能直接new,先等于null在new出管道,确定两端的管道,确定后先做关闭管道(养成习惯),
流的方向:

public static void main(String [] args){
//文件的拷贝,这是可能在面试中出现的手工书写代码!
//功能:将D:/test.avi 拷贝到F:/wudi.avi
// 只要输入输出都有可能有编译时异常
FileInputStream fis = null;
FileOutputStream fos = null;
try{
//1.建立管道
fis = new FileInputStream( “D:/test.avi”);
fos = new FileInputStream( “F:/wudi.avi”);
//2、操作管道
//方法一:输出时间过久
int b =0;//明明是读一个字节,为什么要用一个int来接?
while((b = fis.read() )!=-1){
fos.write(b);
}
// 方法二:会使输出文件字节变大
byte[] b = new byte [1024];//[1024]可增大,加大输出,但范围尽量不要超过兆级!(通过生产测试机上测试确定)
//1Byte = 8bit; 1KB = 1024B; 1MB = 1024KB;
int length = 0;//记录读取了多少个有效字节数
while((length = fis.read(b))!= -1){ //-1判断是否读到文件末尾
fos.write(b,0,length);
fos.fiush();//强制刷出缓冲区的内容
}
} catch(FileNotFoundException e){
e.printStackTrace
} catch(IOException e){
e.printStackTrace
} finally{
//3.关闭管道
if(fis != null){
fis.close();
} catch(IOException e){
e.printStackTrace
}
}
if(fos != null){
try{
fos.close();
} catch(IOException e){
e.printStackTrace
}
}
3:对象的序列化/反序列化
(学习分布式应用的基础“跨文件操作”):
序列化:将内存当中的对象以二进制流的形式输出;
反序列化:将输入的二进制对象流转换为内存中的一个对象;(第二种产生对象的方式:反序列化;“第一种:new;”)
“强调将对象以二进制形式输出,但没有确定输出到什么地方”
(接口章节)标示接口“Serializable”:允许实现他的类进行某项操作;往往不具备任何方法;
应该实现Serializable 接口
管道的对接:对象

Serializable——可序列化接口
javaBean规范中的第三项:应该实现Serializable接口!
让StudentBean implements Serializable(io中)每个类的每次编译都应该重新生成;
使用transient关键字修饰的属性,其值不参与序列化;
public static void main (String [] args){
//对象序列化——将对象以二进制流的形式输出;
StudentBean sb = new StudentBean(“zhang3”,24,true);
ObjectOutputStream oos = null;
// FileOutputStream fos = null;
try{
oos = new ObjectOutputStream(new FileOutputStream (“student.data”));//不用关闭管道;
oos.writeObject(sb)
// fos = new FileOutputStream (“student.data”); // (“student.data”) 文件的相对路径;
// oos = new ObjectOutputStream(fos);
} catch(FileNotFoundException e){
e.printStackTrace
} catch(IOException e){
e.printStackTrace
} finally{
if(oos != null){
oos.close();
} catch(IOException e){
e.printStackTrace
}
}
//对象反序列化——将输入的二机制流转换为内存中的对象
///反序列化是Java中第二种产生对象的方式
StudentBean sb = null;
ObjectInputStream ois = null;
try{
ois = new ObjectInputStream (new FileInputStream (“student.data”));
sb = (StudentBean)ois.readObject();
} catch(FileNotFoundException e){
e.printStackTrace
} catch(IOException e){
e.printStackTrace
} finally{
if(ois != null){
ois.close();
} catch(IOException e){
e.printStackTrace
}
}
System.out.println(sb.getName);
}
file类(文件类):
可以表示文件或文件夹(文件夹也是文件的一种)
public static void main(String[] args){
//file类——来表示操作系统的文件或文件夹对象
File file = new File(“F:/wudi.avi”);
File dir = new File(“F:/ppt”);
//作为文件对象的常用方法
String path1 = file.getAbsolutePath();//获取绝对路径
Stringpath2 =file.getPath();//获取相对路径
long space =file.length();//获取文件大小
long time = file.lastModified();//最后修改时间
System.out.println(path);
System.out.println(space);
System.out.println(new Date(time));
System.out.println(file.isHidden());//是否是隐藏文件
System.out.println(file.isFile());//是否是文件(true是,flo否)
System.out.println(dir.isDirectory());//是否是文件夹
//文件分隔符(File.pathSeparator)
String path = “D:”+File.pathSeparator + ”ffdfd” + File.pathSeparator +”ffafa”;
path = "D:" + System.getProperty("file.separator") + "fdfddfd" + System.getProperty("file.separator") + "fdfdfd";
System.out.println(path);
//作为文件夹对象的常用方法
System.out.println("***************************************");//分割
String[] subFileNames = dir.list();//的到文件夹下面的所有子文件或子文件夹的名字
for(String subFileName : subFileNames){
System.out.ptintln(subFileName());
}
File[]subFiles = dir.listFiles();//的到文件夹下面的所有子文件或文件夹的File对象
for(File subFile : subFiles){
System.out.ptintln(subFile.getName());
}
System.out.println("***************************************");//分割
// 面试体:给任意一个文件夹,打印出该文件夹下面所有的子文件的名字(无论有多少层)“使用递归”
String inputDir = JOptionPane. showInputDialog(“请输入的不是一个文件夹。”);
showAllSubFile(new File(inputDir));
public static void showAllSubFile(File die){
if(dir.isDirectory()){
File[] subFiles = dir.listFiles();
for(File subFile : subFiles){
if(subFile.isDirectory()){
showAllSubFile(subFile);
}else {
System.out.println(subFile.getAbsolutePath());
}
}
}else{
JOptionPane.showMessageDialog(null,“您输入的不是一个文件夹。”);
}
}
}
I/O系统 (输入/输出)的更多相关文章
- 输入/输出系统的四种不同工作方式对CPU利用率比较
程序控制工作方式:输入/输出完全由CPU控制,整个I/O过程中CPU必须等待其完成,因此对CPU的能力限制很大,利用率较低 程序中断工作方式:CPU不再定期查询I/O系统状态,而是当需要I/O处理时再 ...
- Python基础学习笔记---5.输入\输出 I\O文件操作目录
在很多时候,你会想要让你的程序与用户(可能是你自己)交互.你会从用户那里得到输入,然后打印一些结果.我们可以分别使用 raw_input 和 print 语句来完成这些功能.对于输出,你也可以使用多种 ...
- Android系统--输入系统(十)Reader线程_核心类及配置文件深入分析
Android系统--输入系统(十)Reader线程_核心类及配置文件深入分析 0. 前言 个人认为该知识点阅读Android源代码会不仅容易走进死胡同,并且效果并不好,前脚看完后脚忘记,故进行总结, ...
- Android系统--输入系统(十三)Dispatcher线程情景分析_Reader线程传递事件
Android系统--输入系统(十三)Dispatcher线程情景分析_Reader线程传递事件 1. 输入按键 我们知道Android系统的按键分为三类:(1)Global Key;(2)Syste ...
- php+MySql实现登录系统与输出浏览者信息功能
这篇文章主要介绍了php+MySql实现登录系统与输出浏览者信息功能 的相关资料,需要的朋友可以参考下 本系统,与之前在<ASP 连接Access数据库的登陆系统>(点击打开链接)一文 ...
- shell编程-输入/输出重定向(十一)
linux中文件描述符 linux跟踪打开文件,而分配的一个数字,通过这个数字可以实现对文件的读写操作 用户可以自定义文件描述符范围是:3-max,max跟用户的ulimit –n 定义数字有关系,不 ...
- Java 输入/输出——处理流(BufferedStream、PrintStream、转换流、推回输入流)
关于使用处理流的优势,归纳起来就是两点:(1)对于开发人员来说,使用处理流进行输入/输出操作更简单:(2)使用处理流执行效率更高. 1.BufferedInputStream/BufferedOutp ...
- Java 输入/输出 反射
Java 输入/输出 反射 输入输出和反射 一.数据流的基本概念 流一般分为 ( Input Stream ) 和输出流 ( Output Stream ) 两类,但这种划分并不是绝对的.比如一 ...
- [linux]iostat命令详解-监视系统输入输出设备和CPU的使用情况
部分转载https://blog.csdn.net/sunansheng/article/details/51942281 iostat命令被用于监视系统输入输出设备和CPU的使用情况.它的特点是汇报 ...
- 浅谈Scrum敏捷开发:4个输入/输出、3个关键物、3个会议
文章对Scrum敏捷开发流程进行系统的分析,希望借此文能够加深你对敏捷开发的认知,更好的展开产品工作. Scrum敏捷开发,是一种敏捷开发框架,是一个增量的.迭代的开发过程,具备可视.可集成和可运行使 ...
随机推荐
- hdu1024 dp
题意:求一个序列中的最大 m 段和,m 段不能交叉. dp[i][0/1][j] 表示已经取完第 i 个物品,第 i 个物品取或不取,取到第 j 个子段. 用vis[i][0/1][j] 表示该 dp ...
- 《java编程思想》读书笔记 暂停一段时间,改为上面的练习题
发现个很尴尬的现象.我一天实在看得太快了...全写下 写博客都得一晚上.. 之前因为是第一次看这么厚的书,别人都说很难,以为会看很慢的.然而,已经完全学过Java的 我感觉没啥压力,越看越快....第 ...
- 高级Linux SA需要会做的事情
高级Linux SA需要会做的事情:linux---------系统安装(光盘或自动化安装)linux---------系统常用工具安装(sudo,ntp,yum,rsync,lrzsz syssta ...
- imooc-java-作业练习-20150918
小伙伴们,请根据所学知识,编写一个 JAVA 程序,实现输出考试成绩的前三名 要求: 1. 考试成绩已保存在数组 scores 中,数组元素依次为 89 , -23 , 64 , 91 , 119 , ...
- [原创]cocos2d-x研习录-第三阶 多分辨率适配器
在移动终端(智能手机)平台下开发游戏一般都会涉及到屏幕多分辨率适配问题,原因是手机款式多种多样,不同的款式存在有不同的尺寸,即使尺寸相同又可能存在不同的分辨率. 手机屏幕尺寸:指手机屏幕对角线长度. ...
- malloc分配的内存空间是连续的吗
1.linux内核管理内存空间的分配,所有程序对内存空间的申请和其他操作,最终都会交给内核来管理. 2.linux实现的是“虚拟内存系统”,对用户而言,所有内存都是虚拟的,也就是说程序并不是直接运行在 ...
- 推荐的Android ORM框架
1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM.支持JDBC连接,Spring以及Android平台.语法中广泛使用了注解(Annotation ...
- 3、SSH高级服务
1.ssh服务生成新的公钥和私钥[root@rhel6_80 ~]# ssh-keygen Generating public/private rsa key pair. Enter file in ...
- Jquery 防止页面刷新
1.禁止鼠标右键功能$(document).ready(function() { $(document).bind("contextmenu",function(e) { aler ...
- day25、 静态属性、类方法、静态方法、组合、继承、
一. 静态属性.类方法.静态方法 1.1静态属性 class Room: def __init__(self,name,owner,width,length): self.name=name self ...