java I/O系统

I:Input 输入 O:Output 输出

二:流的分类

按照方向:输入流  输出流

按照最小单位:字节流 (byte)  字符流 (char)

三:

所有的I/O系统操作都由以下步骤构成

1)建立流

2)操作流

3)关闭流

四:文件类

java.io包中的File类提供了管理磁盘文件和目录的基本功能

File类有四种构造方法

最常用的的是  public File(URI uri)  URI是资源统一标识符

java.io.File的一些方法,主要还是要查看API文档。

 1 package com.lovo;
 2
 3 import java.io.File;
 4 import java.io.IOException;
 5 import java.util.Date;
 6
 7 /**
 8  * File类测试
 9  *
10  * @author hellokitty
11  *
12  */
13 public class FileTest {
14
15     public static void main(String[] args) {
16         // 创建File对象
17         File file = new File("E:\\jg\\exercise_bak.txt");
18
19         // 能否读
20         System.out.println("能否读:" + file.canRead());
21
22         // 删除
23         System.out.println("删除成功:" + file.delete());
24
25         // 重新创建文件对象
26         file = new File("E:\\jg\\exercise_bak.txt");
27
28         // 判断文件是否存在
29         System.out.println("是否存在:" + file.exists());
30
31         // 目录或文件名称
32         System.out.println("名称:" + file.getName());
33
34         // 是否目录、文件
35         System.out.println("是否目录:" + file.isDirectory());
36         System.out.println("是否文件:" + file.isFile());
37
38         // 最后一次修改时间
39         System.out.println("最后一次修改时间:" + new Date(file.lastModified()));
40
41         // 文件大小
42         System.out.println("文件大小:" + file.length());
43
44         // 重新创建File对象
45         file = new File("E:\\jg");
46
47         System.out.println("文件目录列表:");
48         // 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录
49         String[] list = file.list();
50         for (String string : list) {
51             System.out.println(string);
52         }
5354
55         // 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件对象
56         File[] files = file.listFiles();
57         for (File item : files) {
58             if (item.isDirectory()) { // 当前File对象为目录,则遍历该目录下所有子目录与文件
59                 System.out.println(item.getName() + " 目录下子目录与文件:");
60                 String[] it = item.list();
61                 for (String i : it) {
62                     System.out.println(i);
63                 }
64                 System.out.println("*******************************");
65                 continue;
66             }
67
68             System.out.println(item.getName() + "  文件");
69         }
70
71         // 重新创建File对象
72         file = new File("E:\\jg\\test\\demo\\test.txt");
73         if (!file.exists()) { // 文件不存在
74             // 获取文件路径
75             File dir = file.getParentFile();
76             if (!dir.exists()) { // 目录不存在,则创建路径中所有不存在的目录
77                 dir.mkdirs();
78             }
79
80             try {
81                 // 创建空文件
82                 System.out.println("文件是否创建成功:" + file.createNewFile());
83             } catch (IOException e) {
84                 e.printStackTrace();
85             }
86         }
87
88     }
89 }

五:字节流 byte:用于处理二进制文件

InputStream  ----》FileInputStream    (读取)   OutputStream ---》FileOutputStream   (写入)

字节流的输入输出流代码测试

 1 package com.lovo;
 2
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileNotFoundException;
 6 import java.io.FileOutputStream;
 7 import java.io.IOException;
 8 import java.io.InputStream;
 9 import java.io.OutputStream;
10
11 /**
12  * 字节输入输出流测试
13  *
14  * @author hellokitty
15  *
16  */
17 public class IOTest {
18
19     public static void main(String[] args) {
20         StringBuffer buffer = new StringBuffer(); // 字符串缓冲
21
22         /* 输入流 */
23         InputStream in = null;
24
25         try {
26             // 1. 打开输入流
27             in = new FileInputStream("E:\\jg\\exercise.txt");
28             // 2. 读取
29
30             byte[] b = new byte[1024 * 4];
31             int len = in.read(b); // 返回读取到的字节数,返回-1表示读取到流结尾
32             while(len != -1){
33                 buffer.append(new String(b, 0, len)); // 将读取到的字节解析为String追加到缓冲
34                 len = in.read(b);
35             }
36 //            System.out.println("读到" + len + "字节的数据");
37             System.out.println(buffer.toString());
38         } catch (FileNotFoundException e) {
39             e.printStackTrace();
40         } catch (IOException e) {
41             e.printStackTrace();
42         } finally {
43             // 3. 释放资源,关闭输入流
44             if (in != null){
45                 try {
46                     in.close();
47                 } catch (IOException e) {
48                     e.printStackTrace();
49                 }
50             }
51         }
52
53         /* 输出流 */
54         OutputStream out = null;
55
56         try {
57             File file = new File("D:\\test\\demo\\test.txt");
58             if (!file.getParentFile().exists()){ // 文件路径不存在,则创建路径中所有不存在的目录
59                 file.getParentFile().mkdirs();
60             }
61             // 1. 打开输出流
62             out = new FileOutputStream(file);
63             // 2. 写
64             out.write(buffer.toString().getBytes());
65         } catch (FileNotFoundException e) {
66             e.printStackTrace();
67         } catch (IOException e) {
68             e.printStackTrace();
69         } finally {
70             // 3. 释放输出流资源
71             if (out != null){
72                 try {
73 74                     out.close();//已经带有刷新的了
75                 } catch (IOException e) {
76                     e.printStackTrace();
77                 }
78             }
79         }
80     }
81 }

六:字符流 char 用于处理文本文件   Reader----》InputStreamReader--->FileReader       Write---》OutputStreamWrite---》FileWrite

 1 package com.lovo;
 2
 3 import java.io.FileNotFoundException;
 4 import java.io.FileReader;
 5 import java.io.FileWriter;
 6 import java.io.IOException;
 7 import java.io.Reader;
 8 import java.io.Writer;
 9
10 /**
11  * 字符输入输出流测试
12  *
13  * @author14  *
15  */
16 public class IOTest2 {
17
18     public static void main(String[] args) {
19         StringBuffer buffer = new StringBuffer();
20
21         /* 输入流 */
22         Reader reader = null;
23
24         try {
25             // 1. 打开流
26             reader = new FileReader("E:\\jg\\exercise.txt");
27             // 2. 读取
28             char[] ch = new char[128]; // 缓冲区
29             int len;
30             do {
31                 len = reader.read(ch);
32                 if (len == -1)
33                     break;
34                 buffer.append(new String(ch, 0, len));
35             } while (len != -1);
36             System.out.println(buffer.toString());
37         } catch (FileNotFoundException e) {
38             e.printStackTrace();
39         } catch (IOException e) {
40             e.printStackTrace();
41         } finally {
42             // 3. 释放资源
43             if (reader != null) {
44                 try {
45                     reader.close();
46                 } catch (IOException e) {
47                     e.printStackTrace();
48                 }
49             }
50         }
51
52         /* 输出流 */
53
54         Writer writer = null;
55
56         try {
57             // 1. 打开流
58             writer = new FileWriter("d:\\test.txt");
59             // 2. 写入
60             writer.write(buffer.toString());
61         } catch (IOException e) {
62             e.printStackTrace();
63         } finally {
64             // 3. 释放资源
65             if (writer != null) {
66                 try {
67 68                     writer.close();
69                 } catch (IOException e) {
70                     e.printStackTrace();
71                 }
72             }
73         }
74     }
75 }

七:缓冲流

  1 package com.lovo.day2;
  2
  3 import java.io.BufferedInputStream;
  4 import java.io.BufferedOutputStream;
  5 import java.io.File;
  6 import java.io.FileInputStream;
  7 import java.io.FileNotFoundException;
  8 import java.io.FileOutputStream;
  9 import java.io.IOException;
 10 import java.io.InputStream;
 11 import java.io.OutputStream;
 12
 13 public class BufferedTest {
 14
 15     public static void main(String[] args) {
 16         long start = System.currentTimeMillis();
 17         copyByBuffer("E:\\myeclipse-2015-2014-07-11-offline-installer-windows.exe", "d:\\test.exe");
 18         long end = System.currentTimeMillis();
 19         System.out.println("缓冲:" + (end - start));
 20         System.out.println("***************");
 21         start = System.currentTimeMillis();
 22         copy("E:\\myeclipse-2015-2014-07-11-offline-installer-windows.exe", "d:\\test2.exe");
 23         end = System.currentTimeMillis();
 24         System.out.println("不带缓冲:" + (end - start));
 25     }
 26
 27     private static void copy(String source, String destination){
 28         InputStream in = null;
 29         OutputStream out = null;
 30
 31         File file = new File(destination);
 32         if (!file.getParentFile().exists()){
 33             file.getParentFile().mkdirs();
 34         }
 35
 36         try {
 37             // 打开流
 38             in = new FileInputStream(source);
 39             out = new FileOutputStream(file);
 40             // 操作:读写
 41             byte[] b = new byte[1024];
 42             int len;
 43
 44             while(-1 != (len=in.read(b))){
 45                 out.write(b, 0, len);
 46             }
 47         } catch (FileNotFoundException e) {
 48             e.printStackTrace();
 49         } catch (IOException e) {
 50             e.printStackTrace();
 51         } finally {
 52             // 释放资源
 53             if (in != null){
 54                 try {
 55                     in.close();
 56                 } catch (IOException e) {
 57                     e.printStackTrace();
 58                 }
 59             }
 60             if(out != null){
 61                 try {
 62                     out.close();
 63                 } catch (IOException e) {
 64                     e.printStackTrace();
 65                 }
 66             }
 67         }
 68     }
 69
 70     private static void copyByBuffer(String source, String destination){
 71         BufferedInputStream in = null;
 72         BufferedOutputStream out = null;
 73
 74         try {
 75             // 打开流
 76             in = new BufferedInputStream(new FileInputStream(source), 8 * 1024 * 1024);
 77             out = new BufferedOutputStream(new FileOutputStream(destination), 8 * 1024 * 1024);
 78             // 读写
 79             byte[] b = new byte[1024];
 80             int len;
 81
 82             while(-1 != (len = in.read(b))){
 83                 out.write(b, 0, len);
 84             }
 85         } catch (FileNotFoundException e) {
 86             e.printStackTrace();
 87         } catch (IOException e) {
 88             e.printStackTrace();
 89         } finally {
 90             // 释放资源
 91             if (in != null){
 92                 try {
 93                     in.close();
 94                 } catch (IOException e) {
 95                     e.printStackTrace();
 96                 }
 97             }
 98             if (out != null){
 99                 try {
100                     out.close();
101                 } catch (IOException e) {
102                     e.printStackTrace();
103                 }
104             }
105         }
106     }
107 }

有缓冲的比没有缓冲要快些。

未完。。。

时间: 2024-12-14 11:24:39

java I/O系统的相关文章

java I/O系统(输入输出流)

java I/O系统(输入输出流) 流的特性1.含有流质(数据)2.它有方向(读或写) 流的分类: 输入流和输出流 输入流:io包中的输入流继承自抽象类InputStream或Reader 输出流:io包中的输入流继承自抽象类OutputStream或Writer 字节流和字符流 注:1字节代表1个英文单词存储的数据大小,一个汉字占两字节 1.字节流:以byte为最小单位传送,继承自抽象类InputStream或OutputStream,用于处理二进制文件,InputStream为读取字节流的父

java中获取系统属性以及环境变量

java中获取系统属性以及环境变量 System.getEnv()和System.getProperties()的差别 从概念上讲,系统属性 和环境变量 都是名称与值之间的映射.两种机制都能用来将用户定义的信息传递给 Java 进程.环境变量产生很多其它的全局效应,由于它们不仅对Java 子进程可见,并且对于定义它们的进程的全部子进程都是可见的.在不同的操作系统上,它们的语义有细微的区别,比方,不区分大写和小写.由于这些原因,环境变量更可能有意料不到的副作用.最好在可能的地方使用系统属性.环境变

java I/O系统总结

参考了Thinking in java I/O部分,发现该书更多是从开发者原理性角度去描述I/O系统,这样使得让初学者不太好懂,后面我参考了"尚学堂"关于这部分视频讲解,感觉比较适合初学,有条理性.容易理解. 首先介绍关于流的概念,流比喻成管道. 上一张图片很清晰对流进行分类.最简单方法我们对上图四个抽象类在java API中进行查阅具体提供方法.这里还需要注意区分就是字节.字符这两个基本概念不同. 接下来对节点流和处理流两个概念. 这个就是我认为java I/O比较不方便的,不是直接

JAVA中获取系统时间

一. 获取当前系统时间和日期并格式化输出: import java.util.Date;import java.text.SimpleDateFormat; public class NowString {public static void main(String[] args) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式System.out.println(df.forma

java I/O 系统学习总结

一直说自己要学习.整理java I/O的知识,但一直懒于学习,懒于动手整理:但当自己认真学习.复习.整理后心情豁然开朗.愉悦,因为觉得自己总算对这部分的知识有个初步的了解了,也总算可以将自己学习到的信息分享给大家,因为只有分享出来才能得到更多的指正,我才能更加进步!祝贺一下自己!!!当然,后续工作生活中需要不断练习,才可以使学习到的知识学以致用!加油! 我是以XMIND脑图的形式整理知识,但一直不知道博客园中如何导入脑图,那我这次就先以附件的形式分享自己的JAVA I/O脑图,后续分享中再不断探

Java如何实现系统监控、系统信息收集(转

Java如何实现系统监控.系统信息收集.sigar开源API的学习 系统监控(1) Jar资源下载:http://download.csdn.net/detail/yixiaoping/4903853 首先给大家介绍一个开源工具Sigar官网:http://sigar.hyperic.com/ API: http://www.hyperic.com/support/docs/sigar/index-all.html(由于是英文的,英文不好的可以用谷歌浏览器的翻译功能,直接转换为简体中文进行阅读)

java类加载器-系统类加载器

系统类加载器 系统类加载器可能都耳详能熟,但是为了完整点,还是先简单的说说系统的类加载器吧. public class Test { public static void main(String[] args) { ClassLoader cl1 = Test.class.getClassLoader().getParent().getParent(); System.out.println(cl1); ClassLoader cl2 = Test.class.getClassLoader().

Java+Servlet投票系统

原文:Java+Servlet投票系统 源代码下载地址:http://www.zuidaima.com/share/1550463722228736.htm 简单的投票系统 采用技术 1. Java 2. Servlet 3. MySQL 4. JQuery 经确认,该分享的db文件缺少table,我联系作者提供吧,大家注意. 另外确认jar包 http://www.zuidaima.com/jar/search/servlet-api-2.4.htm

通过java来获取系统的信息

通过java来获取系统以下的信息: 主机名: OS 名称:         OS 版本: OS 制造商: OS 配置: 独立工作站OS 构件类型: 注册的所有人: 注册的组织: 产品 ID:       初始安装日期: 系统启动时间: 系统制造商:      系统型号: 系统类型: 处理器:           BIOS 版本: Windows 目录: 系统目录: 启动设备: 系统区域设置: 输入法区域设置:   时区: 物理内存总量: 可用的物理内存:  虚拟内存: 最大值: 虚拟内存: 可用

JAVA开源B2C系统

前言 最近有人想面向境外销售商品,但是又不想依托于亚马逊这些平台,于是找我来帮忙想弄个B2C系统.因为刚开始只是打算试试水,也就不打算投入多少成本了.所以这边就考虑使用开源的B2C系统来直接使用了. B2C开源系统选择 由于自己的主语言是JAVA,平时工作也都是用的JAVA.考虑到以后需要对系统进行二开.部署维护等.所以一开始就直接查找JAVA 的开源系统了,并且将是JAVA语言开发的作为了第一个必要选项.结果却是证明了自己的愚蠢啊. 在这里需要说明在选择一个开源系统作为线上系统实际部署应用的时