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系统 (输入/输出)的更多相关文章

  1. 输入/输出系统的四种不同工作方式对CPU利用率比较

    程序控制工作方式:输入/输出完全由CPU控制,整个I/O过程中CPU必须等待其完成,因此对CPU的能力限制很大,利用率较低 程序中断工作方式:CPU不再定期查询I/O系统状态,而是当需要I/O处理时再 ...

  2. Python基础学习笔记---5.输入\输出 I\O文件操作目录

    在很多时候,你会想要让你的程序与用户(可能是你自己)交互.你会从用户那里得到输入,然后打印一些结果.我们可以分别使用 raw_input 和 print 语句来完成这些功能.对于输出,你也可以使用多种 ...

  3. Android系统--输入系统(十)Reader线程_核心类及配置文件深入分析

    Android系统--输入系统(十)Reader线程_核心类及配置文件深入分析 0. 前言 个人认为该知识点阅读Android源代码会不仅容易走进死胡同,并且效果并不好,前脚看完后脚忘记,故进行总结, ...

  4. Android系统--输入系统(十三)Dispatcher线程情景分析_Reader线程传递事件

    Android系统--输入系统(十三)Dispatcher线程情景分析_Reader线程传递事件 1. 输入按键 我们知道Android系统的按键分为三类:(1)Global Key;(2)Syste ...

  5. php+MySql实现登录系统与输出浏览者信息功能

    这篇文章主要介绍了php+MySql实现登录系统与输出浏览者信息功能 的相关资料,需要的朋友可以参考下   本系统,与之前在<ASP 连接Access数据库的登陆系统>(点击打开链接)一文 ...

  6. shell编程-输入/输出重定向(十一)

    linux中文件描述符 linux跟踪打开文件,而分配的一个数字,通过这个数字可以实现对文件的读写操作 用户可以自定义文件描述符范围是:3-max,max跟用户的ulimit –n 定义数字有关系,不 ...

  7. Java 输入/输出——处理流(BufferedStream、PrintStream、转换流、推回输入流)

    关于使用处理流的优势,归纳起来就是两点:(1)对于开发人员来说,使用处理流进行输入/输出操作更简单:(2)使用处理流执行效率更高. 1.BufferedInputStream/BufferedOutp ...

  8. Java 输入/输出 反射

    Java  输入/输出   反射 输入输出和反射 一.数据流的基本概念 流一般分为 ( Input Stream ) 和输出流 ( Output Stream ) 两类,但这种划分并不是绝对的.比如一 ...

  9. [linux]iostat命令详解-监视系统输入输出设备和CPU的使用情况

    部分转载https://blog.csdn.net/sunansheng/article/details/51942281 iostat命令被用于监视系统输入输出设备和CPU的使用情况.它的特点是汇报 ...

  10. 浅谈Scrum敏捷开发:4个输入/输出、3个关键物、3个会议

    文章对Scrum敏捷开发流程进行系统的分析,希望借此文能够加深你对敏捷开发的认知,更好的展开产品工作. Scrum敏捷开发,是一种敏捷开发框架,是一个增量的.迭代的开发过程,具备可视.可集成和可运行使 ...

随机推荐

  1. inotify +rsync进行实时同步

    1.安装rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpmyum -y install ino ...

  2. 如何使用vmware-vdiskmanager增加磁盘空间

    VMware Virtual Disk Manager Usage: vmware-vdiskmanager.exe OPTIONS <disk-name> | <mount-poi ...

  3. 一起买beta版本文档报告汇总

    一起买beta版本文档报告汇总 031402401鲍亮 031402402曹鑫杰 031402403常松 031402412林淋 031402418汪培侨 031402426许秋鑫 一.Beta版本冲 ...

  4. 配置文件的生成,关于“make menuconfig”

    之前学习嵌入式的时候从来没有注意过内核源文件下配置文件的生成(都是跟着老师的步骤直接复制过来修改成.config),其实意思也差不多,只是我没有细想其所以然: 编译内核的过程中,配置文件生成过程,A. ...

  5. Android学习笔记——权限解释

    <!--允许读取电话状态SIM的权限--><uses-permission android:name="android.permission.READ_PHONE_STAT ...

  6. HDU2896 病毒侵袭

    题目大意:给出若干病毒的特征码,不超过500个.每个病毒的特征码长度在20~200之间.现在有若干网站的源代码,要检测网站的源代码中是否包含病毒.网站的个数不超过1000个,每个网站的源代码长度在70 ...

  7. AD域修改组策略

    如果我们的计算机加入AD域之后,修改安全策略时不能用本地策略来修改.具体修改方法: .Start(开始)–Programs(程序)–Administrative Tools(管理工具)–Group P ...

  8. wkhtmltopdf乱码解决方案

    在CentOS下使用wkhtmltopdf将html页面转换成pdf的时候对于某些页面可能会出现转换成的pdf中很多字符乱码的情况,更怪异的是直接在命令行下运行一切正常,但在httpd+php下使用却 ...

  9. oracle之集合操作函数---minus、union、intersect

    集合操作符专门用于合并多条select语句的结果,包括:UNION,UNION ALL,INTERSECT,MINUS.当使用集合操作函数时,需保证数据集的字段数据类型和数目一致. 使用集合操作符需要 ...

  10. 学习笔记:同程旅游缓存系统设计:如何打造Redis时代的完美体系(含PPT)

    内容在:http://chuansong.me/n/478502951177 PPT在:http://pan.baidu.com/s/1nvnOEBf 工具 跟 服务 的差别 从工具到服务之间缺失了哪 ...