File、IO流

xiaoxiao2021-02-28  40

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 (String name,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 (String fileName )    根据给定的文件名构造一个 FileWriter 对象;                                FileWriter (String fileName , 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(); } } } }
转载请注明原文地址: https://www.6miu.com/read-2624442.html

最新回复(0)