JAVA数据流的概述
输入输出是指应用程序与外部设备及其他计算机进行数据交流的操作,如读写硬盘数据、向显示器输出数据、通过网络读取其他节点的数据等。任何一种编程语言必须拥有输入输出的处理方式,Java语言也不例外。Java语言的输入输出数据是以流的形式出现的,并且Java提供了大量的类来对流进行操作,从而实现了输入输出功能。
l 数据流的概念:
输入/输出时,数据在通信通道中流动。所谓“数据流(stream)”指的是所有数据通信通道之中,数据的起点和终点。信息的通道就是一个数据流。只要是数据从一个地方“流”到另外一个地方,这种数据流动的通道都可以称为数据流。
l 输入流/输出流:
输入/输出是相对于程序来说的。程序在使用数据时所扮演的角色有两个:一个是源,一个是目的。若程序是数据流的源,即数据的提供者,这个数据流对程序来说就是一个“输出数据流”(数据从程序流出)。若程序是数据流的终点,这个数据流对程序而言就是一个“输入数据流” ( 数据从程序外流向程序) 。
输入流(数据从外面流入程序,只能读取不能写入)
输出流(数据从程序输出外面,只能写入不能读取)
l JAVA的IO包:
Java语言中提供了比较完善的处理输入输出数据的功能,实现这些I/O操作的类和接口都在java.io包中。java.io包中提供了各种各样的输入输出流类,它们都是Object类的直接子类,每一个流类代表一种特定的输入或输出流。
在这些类中,作为Object类的直接子类,基本输入流(InputStream)和基本输出流(OutputStream)是字节流类,读写以字节为单位进行;Reader和Writer类是专门处理16位字符流的类,另外,在Java中还提供了处理文件的一些类,如常用的文件类File、文件随机访问类RandomAccessFile等。
l 文件(File):
在应用程序设计中,除了基本的键盘输入和屏幕输出外,最常用的输入输出就是对磁盘文件的读写了, File类是专门用来管理目录和文件的,每一个File类的对象都与某个目录或文件相联系,调用File类的方法对目录或文件进行管理,如对文件或目录的创建、删除、改名、获取相关信息等,它直接处理文件和文件系统。
File 类提供3个不同的构造方法:
第一构造方法:public File(String pathnam)
Path指明了新创建的File对象对应的磁盘文件或目录名及路径名。 例子: File f1=new File(“d:\\java\\myinput.java”) 或者File f1=new File(“d:/java/myinput.java”) File f2=new File(“java/myinput.java”) File f3=new File(“myinput.mp3”) |
第二构造方法:public File(String path, String name)
Path指明了路径,name 指明文件名。 File f1=new File("d:\\java","myinput.mp3") |
第三构造方法:public File(File dir, String name):
Dir是指已经创建好的路径,name 指明文件名。 File f1=new File("d:\\java") File f2=new File(f1, "myinput.doc") |
l File 的基本操作:
File类为各种文件操作提供了一套完整的方法,使用这些方法来完成对目录和文件的管理。在此列出了File类的一些常用方法。
public boolean canWrite( ):返回文件是否可写。 public boolean canRead( ):返回文件是否可读。 public boolean createNewFile( ):当文件不存在时创建文件。 public boolean delete( ):从文件系统内删除该文件。 public void deleteOnExit( ):程序顺利结束时从系统中删除文件。 public boolean equals(File f):判断两个File类对象是否相同。 public boolean exists( ):判断文件是否存在。 public File getAbsoluteFile( ):以File类对象形式返回文件的绝对路径。 public String getAbsolutePath( ):以字符串形式返回文件的绝对路径。 public String getName( ):以字符串形式返回文件名称。 public String getParent( ):以字符串形式返回文件父目录路径。 public String getPath( ):以字符串形式返回文件的相对路径。 public File getParentFile( ):以File类对象形式返回文件父目录的路径。 public boolean isDirectory():判断该File对象所对应的是否是目录。 public boolea isFile():判断该File对象所对应的是否是文件。 public long lastModified() :返回文件的最后修改时间。 public int length():返回文件长度。 public String[] list():返回文件和目录清单。(字符串对象) public File[] listFiles():返回文件和目录清单。(File对象) public boolean mkdir():在当前目录下生成指定的目录。 public boolean renameTo(File dest):将当前File对象对应的文件名改为dest对象对应的文件名。 public boolean setReadOnly():将文件设置为只读。 public String toString():将文件对象的路径转换为字符串返回。
|
File 的目录分界符: File.pathSeparator: , File.separator: \ |
l File实例:
1、创建文件:
import java.io.File ; import java.io.IOException ; public class FileDemo01{ public static void main(String args[]) { File f = new File("E:"+File.separator+"test.txt") ; // 实例化File类的对象 try{ f.createNewFile(); // 创建文件,根据给定的路径创建 }catch(IOException e){ e.printStackTrace(); // 输出异常信息 } } } |
2、删除文件:
import java.io.File ; public class FileDemo02{ public static void main(String args[]) { File f = new File("E:"+File.separator+"test.txt"); //实例化File类的对象 if(f.exists()) // 如果文件存在则删除 f.delete() ; // 删除文件 } } |
3、分别创建文件夹和文件:
import java.io.File; import java.io.IOException; public class FileDemo03{ public static void main(String args[]) { File f1=new File("E:"+File.separator+"Code"); //“File.separator”表示“\” File f2=new File(f1,"t2.txt"); try{ if(f1.exists()) //判断目录是否存在 System.out.println("目录已存在!"); else if(f1.mkdir()) //创建目录 System.out.println("创建目录成功!");
if(f2.exists()) //判断文件是否存在 System.out.println("文件已存在!"); else if(f2.createNewFile()) //创建文件 System.out.println("创建文件成功!"); }catch(IOException e){ e.printStackTrace(); //输出异常信息 } } } |
4、判断一给定路径是否目录:
import java.io.File; public class FileDemo04{ public static void main(String args[]) { File f = new File("E:"+File.separator+"Code") ; // 实例化File类的对象 if(f.isDirectory()) // 判断是否是目录 System.out.println(f.getPath() + "路径是目录。");//getPath()获取文件路径 else System.out.println(f.getPath() + "路径不是目录。"); } } |
5、列出指定文件的内容:
方法1: import java.io.File; public class FileDemo05{ public static void main(String args[]) { File f = new File("E:"+File.separator) ; // 实例化File类的对象 File files[] = f.listFiles() ; // 列出全部内容 for(int i=0;i<files.length;i++) System.out.println(files[i]) ; } } 方法2: import java.io.File; public class FileDemo05{ public static void main(String args[]) { File f = new File("E:"+File.separator) ; // 实例化File类的对象 String str[] = f.list() ; // 列出给定目录中的内容 for(int i=0;i<str.length;i++) System.out.println(str[i]); } } |
6、用递归列出某个目录下的所有文件(包括其下的文件和子目录):
import java.io.File; public class FileDemo06{ public static void main(String args[]){ File my = new File("E:" + File.separator) ; // 操作路径 list(my) ; } public static void list(File file) // 递归调用 { if(file!=null) // 判断对象是否为空 { if(file.isDirectory()) // 如果是目录 {File f[] = file.listFiles() ; // 列出全部的文件 if(f!=null) // 判断此目录能否列出 for(int i=0;i<f.length;i++) list(f[i]); //因为给的路径有可能是目录,所以,继续判断 } else System.out.println(file) ; // 输出路径 } } } |