码迷,mamicode.com
首页 > 其他好文 > 详细

IO技术

时间:2019-04-15 23:28:01      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:成功   绝对路径   test   input   路径   设备   中心   是你   标准   

---恢复内容开始---

开篇

人们日常生活需要生活用水,那么,水从哪里来呢?我们的生活用水需要一个很大的水工厂,水工厂通过各种大小水管将生活用水运输到我们的社区,我们开一下水龙头就可以用瓢子装水用了。想起来我以前看过的电影,如果刚好你的社区生活用水缺乏,你只能用盘,桶或者其他器皿装水了,然后抬回家去。

我要说什么呢?这跟IO流有什么关系呢?

如果我们把水当做文件,把水工厂当做file,将运输用的大小水管当做inputstream,outputstream,reader,writer,再把瓢子,盘,水桶等容器当做数组,char等。file类是可以放很多很多的水的大仓库,通过inputstream,outputstream,reader,writer这四个节点流(=水管),将水运输到社区,最后,用不同容器(=数组,char)将水装出来用。

你问我为什么要用这个例子作比喻?因为这跟我们的文件处理很相似,在生活中,如果你要用水,会不会去遥远的自来水工厂取水?好吧,你说你家附近就有一家自来水工厂,不远。但是你确定你能直接进去取水用?不嫌麻烦?就算你不想麻烦,但是人家自来水供应商会给你直接接触整个工厂的自来水吗?答案是不会,因为人家也是有严格地按照国家标准执行的。万一你靠近自来水工厂的自来水,投毒进去谁负责任啊。另外一个,为了管理,为了人们的用水方便,只能是将水通过一个大水管到各大社区,然后社区各家各户接一根小的水管到家。

同样的,file类也是一样的,创建了一个file类的对象后,你不可能直接对file的对象进行操作。只能通过inputstream,outputstream,reader,writer这四个水管将文件包装运输,人们用char或者数组等容器从水管中读取数据。

数据源

定义:提供原始数据的媒介(也就是存放数据的地方)。可以是数据库、内存、程序、文件以及网络连接和IO设备

注:一切以程序为中心。文件-->程序(输入流);程序-->文件(输出流)

流的分类

  1. 按流向分类:
  • 输入流:数据源到程序(InputStream、Reader读进来)
  • 输出流:程序到目的地(OutStream、Writer写出去)
  1. 按功能分类:(是否直接操作数据源)
  • 节点流:可以直接从数据源或目的地中读写数据

  • 处理流(包装流):不直接连接到数据源和目的地,是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。

    注:节点流是处于io操作的第一线,所有操作必须通过他来进行。

  1. 按照数据分类
  • 字节流:按照字节读取数据(InputStream、OutputStream)

  • 字符流:按照字符读取数据(Reader、Writer)

    注:操作字符:即我们可以看懂的纯文本,汉语、英语。由于要让计算机认识,所以字符流的底层还是基于字节流的操作(自动的在码表中进行转换)。

File类

注:可能有如下三种情况:文件、文件夹、不存在的文件或文件夹

要知道的:在计算机里面的文件是存储在硬盘上,Java虽然需要和文件打交道,但是它是不可以直接对硬盘进行操作,而是通过虚拟机和我们的操作系统进行交互,所以File代表的是Java和文件的一种联系。因此这个文件可能存在也可能不存在,它是只是一个抽象的概念。

File对象的构建

//File f = new File(String path);直接构建
File f1 = new File("E:/java笔记/java导读.png");
//File f = new File(String parent,String child);父子构建
File f2 = new File("E:/java笔记","java导读.png");
//File f = new File(File p , String c);父对象子名称
File f3 = new File(new File("E:/java笔记"),"java导读.png");

File文件名、路径的获取

/**
* 获取File对象的名称
* String name = f.getName();
* 获取File对象的路径
* String path = f.getPath();构建File对象若使用的是相对路径则返回相对路径反之返回绝对路径
* String path = f.getAbsolutePath();返回File对象的绝对路径
* String path = f.getPatent();返回File对象父级路径,如果没有则返回null
*/

String name = f1.getName();
System.out.println("f1的name:"+ name);//f1的name:java导读.png
String path = f1.getPath();
System.out.println("f1的path:"+path);//f1的path:E:\java笔记\java导读.png
String pathParent = f1.getParent();
System.out.println("f1的parent路径:"+pathParent);//f1的parent路径:E:\java笔记

文件的状态

/**
* 判断文件的状态
* f.exists();
* f.isFile();
* f.isDirectory();
 */

boolean exist = f1.exists();
System.out.println("f1是否存在:"+exist);//f1是否存在:true
boolean isFile = f1.isFile();
System.out.println("f1是否是文件:" + isFile);//f1是否是文件:true
boolean isDirectory = f1.isDirectory();
System.out.println("f1是否是文件夹:" + isDirectory);//f1是否是文件夹:false

文件的其他操作

/**
 * 其他的信息
* long s = f.length();返回的文件的字节数,当为0是有两种情况:一:文件字节数为0;二:是文件夹
* Boolean b = file.createNewFile();当文件不存在是才创建成功
* Boolean b = file.delete();删除已经存在的文件
*/
System.out.println("f1的文件的字节数:"+ f1.length());
File newFile = new File("E:/java笔记/1.txt");
boolean isCreate = newFile.createNewFile();
System.out.println("是否创建成功:"+isCreate);
boolean delete = newFile.delete();
System.out.println("是否删除成功:"+delete);

创建文件夹

/**
* 创建文件夹:
* boolean b = f.mkdir();必须确保上级目录存在,否则创建失败
* boolean b = f.mkdirs();上级目录可以不存在,不存在则一同创建。
*/
File file = new File("E:/java笔记/mkdirTest");
boolean ismkdir = file.mkdir();
System.out.println("file创建目录是否成功:"+ ismkdir);
File file1 = new File("E:/java笔记/Test/mkdirsTest");
boolean ismkdirs = file1.mkdirs();
System.out.println("file2创建多级目录是否成功:"+ ismkdirs);

列出下一级

/**
* 列出下一级:
* String[] subNames = f.list();列出下级名称
* File[] subFiles = .listFile();列出下级File对象
*/
File sub = new File("E:/java笔记/第一章");
String[] subNames = sub.list();
for(String s1 : subNames){
    System.out.println(s1);
}
System.out.println("_________________________   ");
File[] subFiles = sub.listFiles();
for(File s2 : subFiles){
    System.out.println(s2.getAbsolutePath());
}
/**
* 打印结果如下:
* 
*   if-switch-三元运算符.docx
*   循环语句.docx
*   _________________________
*   E:\java笔记\第一章\if-switch-三元运算符.docx
*   E:\java笔记\第一章\循环语句.docx
*/

---恢复内容结束---

IO技术

标签:成功   绝对路径   test   input   路径   设备   中心   是你   标准   

原文地址:https://www.cnblogs.com/lomon6/p/10713603.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!