文档章节

java中IO类的各种操作

ForingY
 ForingY
发布于 2016/02/26 15:20
字数 1217
阅读 15
收藏 1

java的IO类操作主要包括如下几类

 1、File类的使用。

 2、字节操作流:OutputStream、InputStream

 3、字符操作流:Reader、Writer

 4、对象序列化:serializable

(1)File类

Java代码

[java] view plain copy print?

  1. public class File extends Object implements Serizliable Comparable<File>  

        从定义看,File类是Object的直接子类,同时它继承了Comparable接口可以进行数组的排序。

File类的操作包括文件的创建、删除、重命名、得到路径、创建时间等,以下是文件操作常用的函数。

 File类的操作:

(1)创建文件,注意File.separator可以解决跨操作系统的问题。

        下面的例子是一创建一个文件,如果该文件存在则删除,否则创建该文件。

Java代码

  1. public class FileDemo1 {   

  2.     public static void main(String[] args) {   

  3.         File file = new File("D:" + File.separator + "test.txt");   

  4.         if (file.exists()) {   

  5.             file.delete();   

  6.         } else {   

  7.             try {   

  8.                 file.createNewFile();   

  9.             } catch (IOException e) {   

  10.                 // TODO Auto-generated catch block   

  11.                 e.printStackTrace();   

  12.             }   

  13.         }   

  14.     }   

  15. }  

 (2)文件的类型函数

       file.isFile(); //判断是不是文件

       file.isDirectory();//判断是不是目录

(3)列出目录的内容

        pulbic String[] list();//列出所有文件名和目录名

        public File[] listFiles();//列出所有文件和目录

(2)字节操作流(btyle)

 (1)字节输出流OutputStream



 

Java代码

  1. public class FileDemo1 {   

  2.     public static void main(String[] args) {   

  3.         File file = new File("D:" + File.separator + "test.txt");//指定要操作的文件   

  4.         OutputStream out=null;//定义字节流输出对象   

  5.         try {   

  6.             //out= new FileOutputStream(file,true);//是否字节追加函数   

  7.             out= new FileOutputStream(file);//获取实际的字节流输出对象,内容覆盖   

  8.         } catch (FileNotFoundException e) {   

  9.             e.printStackTrace();   

  10.         }   

  11.         String  info="hello";//要输入的内容   

  12.         byte[] b=info.getBytes();//将字符转化为字节数组   

  13.         try {   

  14.             out.write(b);   

  15.         } catch (IOException e) {   

  16.             e.printStackTrace();   

  17.         }   

  18.         try {   

  19.             out.close();   

  20.         } catch (IOException e) {   

  21.             e.printStackTrace();   

  22.         }   

  23.     }   

  24. }  

 (2)字节输入流InputStream


Java代码

  1. public class FileDemo1 {   

  2.     public static void main(String[] args) {   

  3.         File file = new File("D:" + File.separator + "test.txt");//指定要操作的文件   

  4.         InputStream In=null;//定义字节流输入对象   

  5.         try {   

  6.             //out= new FileOutputStream(file,true);//是否字节追加函数   

  7.             In= new FileInputStream(file);//获取实际的字节流输入对象   

  8.         } catch (FileNotFoundException e) {   

  9.             e.printStackTrace();   

  10.         }   

  11.         int len=0;//输入数组长度   

  12.         byte[] b=new byte[1024];//开辟空间,读取内容   

  13.         //byte[] b=new byte[(int)file.length()];//根据文件大小开辟空间   

  14.         try {   

  15.             len=In.read(b);//读取   

  16.         } catch (IOException e1) {   

  17.             e1.printStackTrace();   

  18.         }   

  19.         try {   

  20.             In.close();   

  21.         } catch (IOException e) {   

  22.             e.printStackTrace();   

  23.         }   

  24.         System.out.println(new String(b,0,len));   

  25.     }   

  26. }

 (3)字符输出流Write

 

Java代码

  1. public class FileDemo1 {   

  2.     public static void main(String[] args) {   

  3.         File file = new File("D:" + File.separator + "test.txt");// 指定要操作的文件   

  4.         Writer write = null;// 定义字符输出流   

  5.         try {   

  6.             write = new FileWriter(file);   

  7.         } catch (IOException e) {   

  8.             e.printStackTrace();   

  9.         }   

  10.         String infor = "hello,heiehiehieh";   

  11.         try {   

  12.             write.write(infor);   

  13.         } catch (IOException e) {   

  14.             e.printStackTrace();   

  15.         }   

  16.         try {   

  17.             write.close();   

  18.         } catch (IOException e) {   

  19.             e.printStackTrace();   

  20.         }   

  21.     }   

  22. }  

 (4)字符输入流Reader



 

Java代码

  1. public class FileDemo1 {   

  2.     public static void main(String[] args) {   

  3.         File file = new File("D:" + File.separator + "test.txt");// 指定要操作的文件   

  4.         Reader read = null;// 定义字符输入流   

  5.         try {   

  6.             read = new FileReader(file);   

  7.         } catch (IOException e) {   

  8.             e.printStackTrace();   

  9.         }   

  10.         String infor = "hello,heiehiehieh";   

  11.         char[] b=new char[1024];//设置字符的长度   

  12.         try {   

  13.             int len=read.read(b);   

  14.         } catch (IOException e) {   

  15.             e.printStackTrace();   

  16.         }   

  17.         try {   

  18.             read.close();   

  19.         } catch (IOException e) {   

  20.             e.printStackTrace();   

  21.         }   

  22.     }   

  23. }  

 (5)字节流和字符流的区别(重点)

      字节流没有缓冲区,是直接输出的,而字符流是输出到缓冲区的。因此在输出时,字节流不调用colse()方法时,信息已经输出了,而字符流只有在调用close()方法关闭缓冲区时,信息才输出。要想字符流在未关闭时输出信息,则需要手动调用flush()方法。

(6)转换流:在io中还存在一类是转换流,将字节流转换为字符流,同时可以将字符流转化为字节流。

OutputStreamWriter(OutStream out):j将字节流以字符流输出。

InputStreamReader(InputStream in):将字节流以字符流输入。

(7)打印流 PrintStream

      在操作中要求输出信息时,可以采用PrintStream进行输出,它包括PrintWrite和PrintReader

 (3)对象序列化

       对象序列化是指将一个对象可以转化为二进制的byte流,可以以文件的方式进行保存。

       将对象保存在文件的操作叫做对象的序列化操作。

       将对象从文件中恢复的操作叫做反序列化操作。

一个对象如果要能序列化,它必须继承Serizliable。在实现序列化是则需要ObjectOurputStream完成,而需要反序列化时则采用ObjectInputStream。

 

 transient关键字:变量声明为Transient后,该变量不可序列化。

(4)内存流

        在项目的开发过程中,有时希望只产生临时文件,将信息输出的内存中,此时会用到内存流,内存流基本方法如下:

 

Java代码

  1. public class FileDemo1 {   

  2.     public static void main(String[] args) {   

  3.         String infor = "hello";   

  4.         // 所有的内容向内存中输入   

  5.         InputStream input = new ByteArrayInputStream(infor.getBytes());   

  6.         // 所有内存的内容由outputStream输出   

  7.         OutputStream out = new ByteArrayOutputStream();   

  8.         int temp = 0;   

  9.         try {   

  10.             while ((temp = input.read()) != -1) {   

  11.                 char c = Character.toUpperCase((char) temp);   

  12.                 out.write(c);//从内存中输出,所有的内容都保存在ByteArrayOutputStream中   

  13.             }   

  14.         } catch (IOException e) {   

  15.             e.printStackTrace();   

  16.         }   

  17.         try {   

  18.             input.close();   

  19.         } catch (IOException e) {   

  20.             e.printStackTrace();   

  21.         }   

  22.         try {   

  23.             out.close();   

  24.         } catch (IOException e) {   

  25.             e.printStackTrace();   

  26.         }   

  27.         System.out.println(out.toString());   

  28.     }   

  29. }  

(5)System类对IO的支持



 (6)缓存读取


© 著作权归作者所有

共有 人打赏支持
ForingY
粉丝 23
博文 272
码字总数 156129
作品 0
杭州
程序员
私信 提问
《Kotin 极简教程》第15章 Kotlin 文件IO操作、正则表达式与多线程

第15章 Kotlin 文件IO操作与多线程 《Kotlin极简教程》正式上架: 点击这里 > 去京东商城购买阅读 点击这里 > 去天猫商城购买阅读 非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎...

程序员诗人
2017/07/24
0
0
Java中的字符集编码入门(五)

如果你是JVM的设计者,让你来决定JVM中所有字符的表示形式,你会不会允许使用各种编码方式的字符并存? 我想你的答案是不会,如果在内存中的Java字符可以以GB2312,UTF-16,BIG5等各种编码形...

Java开发者
2010/05/05
122
0
BAT等公司必问的8道Java经典面试题,你都会了吗?

工作多年以及在面试中,我经常能体会到,有些面试者确实是认真努力工作,但坦白说表现出的能力水平却不足以通过面试,通常是两方面原因: 1、“知其然不知其所以然”。做了多年技术,开发了很...

java填坑路
01/06
0
0
跳槽时,这些Java面试题99%会被问到

我在 Oracle 已经工作了近 7 年,面试过从初级到非常资深的Java工程师,且由于 Java 组工作任务的特点,我非常注重面试者的计算机科学基础和编程语言的理解深度,可以不要求面试者非要精通 ...

Java小铺
2018/08/15
0
0
Apache开源项目分类列表

分类 项目名 说明 开发语言 服务器 (共20) Apache HTTP Server 全球第一HTTP服务器 C/C++ Tomcat Java的Web服务器 Java James 邮件服务器 Java SpamAssassin 反垃圾邮件 C/C++ Perl Apach...

johnnyhg
2009/05/08
2.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

多表查询

第1章 多表关系实战 1.1 实战1:省和市  方案1:多张表,一对多  方案2:一张表,自关联一对多 1.2 实战2:用户和角色 (比如演员和扮演人物)  多对多关系 1.3 实战3:角色和权限 (比如...

stars永恒
今天
1
0
求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

o0无忧亦无怖
昨天
6
0
Mac Vim配置

1.升级 vim   我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim --with-lua --with-override-system-vim 这将下...

Pasenger
昨天
7
0
vmware安装Ubuntu上不了网?上网了安装不了net-tools,无法执行ifconfig?

1.重新设置网络适配器还是不行,如下指定nat 2.还需要指定共享网络,我是在无线环境下 3.无法执行ifconfig https://packages.ubuntu.com/bionic/net-tools到这个网站下载net-tools的deb文件...

noob_chr
昨天
3
0
解决SVN:E210007无法协商认证机制

svn:E210007 svn: Cannot negotiate authentication mechanism 执行下面代码即可 sudo yum install cyrus-sasl cyrus-sasl-plain cyrus-sasl-ldap...

临江仙卜算子
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部