File、IO流

2018.1.18-File、IO流
一、File类

java.io.File类 表示系统文件(即文件和目录)

(1)创建对象: File file=new File(String pathname );

(2)调用方法:操作文件或目录属性eg:  c:\\test.txt      c:/test.txt

Separator默认分隔符:unix“/”;  windows”\\”

(3)常用方法:

File f=new File(“c:”+File.separator+”test”);

 f.exists();   //判断是否存在

f.delete();  //删除文件或目录名

f.createNewFile();  //创建文件

f.mkdir();  //抽象路径名指定的目录

f.mkdirs();包括所有必需但不存在的目录

f.getPath() ;   (getAbsolutePath()) //当前路径

f.getParentFile() ;  //父目录对象

f.isDirectory();

File[] files=f.listFiles();//返回当前正在遍历的目录中文件和目录的File实例数组

eg1:递归遍历文件夹

public static void main(String[] args) {
   File f=new File("f:"+File.separator);
   showAllFiles(f);
}
public static void showAllFiles(File f){
   if(f!=null){
	if(f.isDirectory()){   // 是否为目录
        File[] files=f.listFiles();   // 返回当前正在遍历的目录中的文件和目录的File实例数组
       if(files!=null){
           for(File file:files){
                showAllFiles(file);
           }
       }
      }else{
	System.out.println(f.getPath());
	   }
	}
}

eg2:判断文件或目录是否存在,若存在进行删除操作,反之进行创建;

package file;
import java.io.File;
import java.io.IOException;

public class FileDemo {
	public static void main(String[] args) {
		File f=new File("d:"+File.separator+"test.txt");
		if(f.exists()){   // 判断文件或目录是否存在
			f.delete();   // 删除文件
			System.out.println("文件已删除");
		}else{
			try {
				f.createNewFile();   // 创建新文件
				System.out.println("创建成功!");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

eg3:遍历的目录中文件和目录

package file;
import java.io.File;

public class ListFilesDemo {
	public static void main(String[] args) {
		File f=new File("d:"+File.separator);
		File[] files=f.listFiles();
		System.out.println(files.length);//文件长度
		for(File file:files){
			System.out.println(file);
		}
	}
}

eg4:创建目录,并进行当前路径和父目录路径进行展示;

package file;
import java.io.File;

public class DirDemo {
	public static void main(String[] args) {
		File f=new File("e:"+File.separator+"test1"+File.separator+"test2");
		boolean flag=f.mkdirs();   // 创建目录,包括所有必需但不存在的父目录
		System.out.println(flag?"目录创建成功":"创建失败");		
		System.out.println(f.getPath());
		System.out.println(f.getParentFile());
	}
}

二、IO流 的基本原理及分类

(1)数据流是指数据通信的通道

    程序中输入、输出是以“流”方式进行的。

(2)IO流的分类

    1、按流向分:

         输入流:程序从数据源读取数据的流

         输出流:程序向数据源写入数据的流

    2、按数据传输单位分:

         字节流:以字节为单位传输数据的流

         字符流:以字符为单位传输数据的流

    3、按功能分:

         节点流:用于直接操作目标设备的流

         处理流:是对于一个已存在的流的连接和封装,通过对    数据的处理为程序为程序提供更强大、灵活的读写功能

(3)抽象流类:(JDK所提供的所有流类位于java.io包中,分别继承以下四种流类)

    

    以上四个抽象流类的重要方法:InputStream:  read(xx)读取字节系列方法;
                                                     OutputStream:  write(xx)写入字节系列方法;

                                                     Reader: read(xx)读取字符系列方法;

                                                     Writer:  write(xx)写入字符系列方法。

三、 文件字节流和 文件字符流

   (1)类别

             文件字节流:FileInputStream,FileOutputStream;

             文件字符流:FileReader,FileWriter.

   (2)构造方法:

     a. FileInputStream类: FileInputStream(File file);

                                           FileInputStream(Stringname);
     b.FileOutputStream类:FileOutputStream(File file);
                                            FileOutputStream(Stringname); 
                                            FileOutputStream(Stringname,boolean append);

         注意:前两种构造方法在向文件写数据时将覆盖文件中原有的内容;

                   创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空文件。

     c.FileReader类:FileReader(File file)  在给定从中读取数据的 File 的情况下创建一个新FileReader;

                                FileReader(StringfileName)  在给定从中读取数据的文件名的情况下创建一个新 FileReader

      d.FileWriter类:FileWriter(File file)    根据给定的 File 对象构造一个 FileWriter;

                                FileWriter(File file, boolean append)   根据给定的 File 对象构造一个 FileWriter对象。;
                                FileWriter(StringfileName)   根据给定的文件名构造一个 FileWriter对象;
                               FileWriter(StringfileName, boolean append)    根据给定的文件名以及指示是否附加写入数据的boolean值                                                                                                                来构造 FileWriter对象。

eg5:从文件向程序中读取数据(FileInputStream、InputStream):

package stream;
import java.io.*;

public class FileInputStreamDemo {
	public static void main(String[] args) {
		File f=new File("e:"+File.separator+"test.txt");
		InputStream input=null;
		try {
			input=new FileInputStream(f);
			/* 每次读取一个字节数据
			int data=0;
			while((data=input.read())!=-1){
				byte b=(byte)data;
				byte[] array=new byte[1];
				array[0]=b;
				String str=new String(array);
				System.out.print(str);
			}*/
			byte[] b=new byte[1024];    // 自定义缓冲区(“卡车”)
			int len=input.read(b);     // 读取数据到byte[]数组中,返回读入到byte[]数组中的字节数
			System.out.println("读取的内容是:"+new String(b,0,len));
		}catch(Exception e) {
			e.printStackTrace();
		}finally{
			try {
				input.close();   // 关闭流
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

eg6:从程序向文件中写入数据(FileOutputStream、OutputStream):

package stream;
import java.io.*;

public class FileOutputStreamDemo {
	public static void main(String[] args) {
		File f=new File("e:"+File.separator+"test.txt");
		OutputStream out=null;
		try {
			out=new FileOutputStream(f,true);        // 开启追加模式
			out.write("秦时明月之君临天下".getBytes());// 直接写入一个字节数组
			
			String data="雪山飞狐";
			byte[] b=data.getBytes();
			out.write(b,0,4);                        // 使用三参的write(xxx)方法进行写入
			System.out.println(f.length());
			System.out.println("写入成功!");
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

eg7:从文件向程序中读取数据(FileReader、Reader):

package stream;
import java.io.*;

public class FileReaderDemo {
	public static void main(String[] args) {
		Reader r=null;
		try {
			r=new FileReader("e:"+File.separator+"test.txt");
			int data=r.read();            // 读取一个字符
			char c=(char)data;            // 转换成字符
			System.out.println("第一次读取:"+c);
			char[] cbuf=new char[1024];   // 自定义缓冲区
			int len=r.read(cbuf);         // 读取数据放入缓冲区中,返回存入缓冲区中的字符个数
			System.out.println("第二次读取:"+new String(cbuf,0,len));
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				r.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

eg8:从程序向文件中写入数据(FileWriter、Writer):

package stream;
import java.io.*;

public class FileWriterDemo {
	public static void main(String[] args) {
		Writer w=null;
		try {
			w=new FileWriter("e:\\test.txt");
			w.write("你好,File、IO".toCharArray());   // 写入字符数组
			w.write("ABCDEFG");                       // 写入字符串
			w.write('a');                             // 写入单个字符
			w.flush();                                // 将缓冲区中的写入内容,刷到磁盘上
			System.out.println("写入成功!");
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				w.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值