JavaIO流(一)

原创 2015年07月10日 12:30:51
1、 File类
       File类是IO包中唯一代表磁盘文件和目录本身信息的类,而不是文件中的内容。
       File类定义了一些方法来操纵文件,例如:创建、删除文件及重命名文件。Java中的目录被当做一种特殊的文件使用,list方法可以返回目录中的所有子目录和文件名。
       (1)File类的构造函数
            File(File parent,String child):使用一个File对象parent与字符串创建一个File对象。
            File(String pathname):使用指定的路径pathname创建一个File对象。
            File(String parent,String child):使用指定的路径与字符串创建一个File对象。
            例如:File f=new File("c:\\abc.txt");     File file=new File("c:\\","abc.txt");    File file=new File("c:\\");
       (2)File类的一些常用方法
            String getPath():返回File代表的路径。
            String getParent():返回上一层路径。
            String getName():返回File所代表的目录或文件名称,即整个路径的最后一段字符串。
            String getAbsolutePath():将File代表的内容转换成绝对路径。
            boolean exists():检查File所代表的路径是否存在。
            long length():返回File代表的路径占了几个字节。
            boolean createNewFile()Throws IOException:以File的内容为文件名建立一个新文件。
       (3)列出目录中的文件
            如果我们对list方法不使用任何参数,将可以取得File对象所包含的完整列表。如果想设定某些筛选条件,可以使用目录过滤器listFiles()方法。例如:得到某个File对象的所有文件,并过滤出后缀是.txt的文件如下面代码所示:
		File file=new File("E:\\");
		File[] fs=file.listFiles();//若当前对象代表目录,则将此目录内所有文件转换为File对象,返回File数组,若当前对象非目录,则返回null
		if(null==fs){
		   System.out.println("目录不存在或者为空");
		}else{	
			for(File f:fs){
				if(f.isDirectory()){
					System.out.print("目录:");
				}else{
					System.out.print("文件:");
				}
				System.out.println(f);
				if(f.getName().toLowerCase().endsWith(".txt")){
					System.out.println("txt file:"+f);
				}
			}
		}
2、 流
       Java中对文件的操作是以流的方式进行的。流是Java内存中的一组有序数据序列。Java将数据从源(文件、内存、键盘、网络)读入到内存中,形成了流,然后将这些流还可以写到另外的目的地(文件、内存、控制台、网络),之所以称之为流,是因为这个数据列在不同时刻所操作的是源的不同部分。
       流代表任何有能力产生数据的数据源,或是有能力接收数据的接收端,例如键盘就是一个标准的输入流,因为它可以产生数据。前面所说的File类关心的是磁盘上存储的文件,而流类将关心的是文件的内容。
       从流的方向上来看可以分为输入流和输出流。
       从流的类型上来看可以分为字节流和字符流。
       字节流:按字节对文件进行数据读写操作,适合于二进制文件。对于图像音频等人不可读的,也不需要读的,其他程序需要直接处理字节的,这时候用字节流。
       字符流:在字节流的基础上进行编码,也就是需要读其中的内容时,可以用字符流。
       字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符集;字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以;字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的,但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化,这两个之间通过InputStreamReader和OutputStreamWriter来关联,实际上是通过byte[]和String来关联。下面我们用几个常用类型的数据来比较下字节流跟字符流的区别:
                int a=5;
		boolean b=true;
		char c='G';
		String d="你好";		
		try {
			//使用字符流打印数据到文件中,字符流完全保证了和我们输入的字符一致。
			PrintWriter pw=new PrintWriter(new File("e:\\IODemo1.txt"));
			pw.print(b);//true
			pw.print(a);//5
			pw.print(c);//G
			pw.print(d);//你好
			pw.close();
			//再看看字节流
			DataOutputStream dos=new DataOutputStream(new FileOutputStream("e:\\IODemo1.txt"));
			dos.writeInt(a);
			dos.writeBoolean(b);
			dos.writeChar(c);
			dos.writeUTF(d);
			dos.writeChars(d);
			dos.writeBytes(d);
			dos.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			
			e.printStackTrace();
		}
       字节流结果是二进制文件,我们用十六进制编辑器打开可以得到下面的结果

       a是00 00 00 05,int是四个字节。b是01,布尔型变量一个字节。c是00 47,char是两个字节。d分别用3个不同的函数写进文件中,第一个是00 06 E4 BD A0 E5 A5 BD,前面的00 06是writeUTF方法加上去的,表示字节的数目,后面六个字节是“你好”的UTF编码,每个汉字3个字节;第二个是4F 60 59 7D,这是“你好”的Unicode编码,每个汉字2个字节;第三个是60 7D,这是从4F 60 59 7D中分别取得两个汉字的低字节。
3、 字节流
        (1)InputStream(所有字节输入流的父类,高级流)与OutputStream(所有字节输出流的父类)
             我们把能够读取一个字节序列的对象称为输入流;我们把能够写入一个字节序列的对象称为输出流。Java中用java.io.InputStream来描述输入流基类,java.io.OutputStream来描述输出流的基类;这两个类都是抽象的,所以Java中让所有和输入相关的类都继承自InputStream,让所有和输出相关的类都继承自OutputStream。
             InputStream一些常用方法:
 int read();//Reads the next byte of data from the input stream,返回值为int,当返回-1时,文件读取完
 int read(byte[] b);//Reads some number of bytes from the input stream and stores them into the buffer array b.返回值为实际读取到的字节数      
 int read(byte[] b,int off,int len); //读取len个字节,放置到下标off开始的字节数组b中,返回值为实际读取的字节数量。
 long skip(long n);//读指针跳过n个字节不读,返回值为实际跳过的字节数量
 close();//流操作完后必须关闭
             OutputStream的一些常用方法:
void write(int b);//往流中写一个字节b
void write(byte[] b);//往流中写一个字节数组b
void write(byte[]b,int off,int len);//把字节数组b从下标off开始,长度为len的字节写入流中
flush();//刷空输出流,并输出所有被缓存的字节,由于某些流支持缓存功能,该方法将把缓存中所有内容强制输出到流中。
close();//关闭流,流操作完毕后必须关闭。 
       (2)FileInputStream与FileOutputStream
             这两个类负责文件的读写操作,读写的内容都是字节或字节数组,换句话说,这两个类可以处理计算机中任何的数据,因为计算机中数据存储最终都是字节存储的。
             FileInputStream:文件输入字节流,低级流
             File file=new File("D:/aaa.txt");
             FileInputStream fis=new FileInputStream(file);
             fis.close();使用完后将流关闭 在程序中有高级流和低级流时,关闭高级流就好,高级流会自动关闭自己调用的低级流
             FileOutputStream:文件输出字节流,低级流,
             FileOutputStream fos=new FileOutputStream(file);输出时会覆盖原文件内容
             FileOutputStream fos1=new FileOutputStream(file,true);true不会覆盖原文件内容,而是在末尾追加,false会覆盖原内容。
       (3)DataInputStream与DataOutputStream
             DataInputStream与DataOutputStream分别继承自FileInputStream与FileOutputStream,分别实现了DataInput接口与DataOutput接口,这两个类主要提供了对java基本数据类型包括字符串类型进行读写的功能。
             构造函数如下:
              public DataInputStream(InputStream in)
              public DataOutputStream(OutputStream out)
       (4)BufferedInputStream与BufferedOutputStream
             BufferedInputStream与BufferedOutputStream可以为InputStream、OutputStream类的对象增加缓冲区功能。构建BufferedInputStream实例时,需要给定一个InputStream类型的实例,实现BufferedInputStream时,实际上最后是实现InputStream实例。构建BufferedOutputStream实例时,需要给定一个OutputStream类型的实例,实现BufferedOutputStream时,实际上最后是实现OutputStream实例。
             BufferedInputStream的数据成员buf是一个位数组,默认为2048字节。当读取数据来源时,例如文件,会尽量将buf填满。当使用read方法时,实际上是先读取buf中的数据,而不是直接对数据源作读取。
             BufferedOutputStream的数据成员buf是一个位数组,默认为512字节,当使用write方法写入数据时,实际上会先将数据写到buf中,当buf满了才会实现给定的write方法,将buf数据写到目的地,而不是每次都对目的地做写入的动作。为了确保缓冲区中的数据一定被写至目的地,建议最后执行flush()将缓冲区中的数据全部写出目的流中。
       (5)ByteArrayInputStream和ByteArrayOutputStream
             流的来源或目的地不一定是文件,也可以是内存中的一个空间,例如一个位数组。ByteArrayInputStream和ByteArrayOutputStream即是将位数组当做流输入来源、输出目的地的类。


           



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

javaIo与流 读写文件

  • 2011-12-17 16:00
  • 848KB
  • 下载

JavaIO流学习成果(工具类)

这两天又把IO相关的过了一遍加深了一下印象,下面是自己写的工具类欢迎批评指正 package com.wangzic.io_tools; import java.io.BufferedWriter...

JavaIO流详细总结

  • 2012-08-17 00:49
  • 635KB
  • 下载

IO流 javaio java 流

  • 2012-06-01 12:48
  • 268KB
  • 下载

javaIO流学习总结

黑马程序员        ----------------------android培训、java培训 、期待与您交流! ----------------------   IO流按操作数据分为:...

javaIO流类简介

  • 2012-11-21 11:00
  • 22KB
  • 下载

JAVAIO流学习总结(转)

  • 2012-09-05 11:23
  • 3.51MB
  • 下载

JavaIo流,文件文件夹拷贝工具类

package FileUtil; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import j...

javaIO流笔记

  • 2014-08-10 01:54
  • 16KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)