黑马程序员-java基础-IO(二)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------

一、概述

  Java除了基本的字节流、字符流之外,还提供了File类、properties类、打印流、序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息。下面将对它们进行简单的介绍。

 

一、正文

1File

      File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。它的特点是:用来将文件或文件夹封装成对象;方便于对文件与文件夹的属性信息进行操作;File类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变;File对象可以作为参数传递给流的构造函数

通过调用File类的各种方法,能够完成创建文件、删除文件、重命名文件,判断文件的读取权限及文件是否存在,设置和查询文件的最近修改时间等操作。它的常用方法如下:

1. 创建:Boolean createNewFile(); //在指定位置创建文件,如果该文件已经存在,则不创建,返回false。和输出流不一样,如果文件已经存在,会覆盖。

    boolean mkdir(); //创建文件夹,只能创建一级文件夹

2. 删除:boolean delete(); //删除文件或目录。文件存在,返回true;文件不存在或者正在被执行,返回false。 

    void deleteOnExit(); //在程序退出时删除指定文件

3. 判断:boolean canExecute(); //是否是可执行文件

      boolean exists(); //文件是否存在

      boolean isFile(); //是否是文件

      boolean isDirectory();//是否是文件夹

      boolean isHidden(); //是否是隐藏文件

      boolean isAbsolute(); //文件是否是绝对路径

  下面是一段代码:如果给定了一个目录,要求把此目录中的全部文件都列出来,包括子文件夹下的文件。

public class Test8 {

       public static void main(String[] args) {

              File f = new File("d:" + File.separator);

              print(f);

}

       public static void print(File f) {

              if (f != null) {

              if (f.isDirectory()) {

              File[] files = f.listFiles();

              if (files != null) {

              for (File file : files) {

                     print(file);

              }

              }

}     else {

    System.out.println(f);

     }

     }

  }

}

  注意:File类是在java.io包中唯一与文件本身有关的,可以使用File类创建、删除等常见的文件操作,.在使用File类指定路径的时候一定要注意操作系统间的差异,尽量使用separator进行分割。

2Properties

  Properties是Hashtable的子类,它具备Map集合的特点。而且它里面还有存储的键值对,都是字符串,无泛型定义。是集合中和IO技术想结合的集合容器。可用于键值对形式的配置文件,在加载时需要数据有固定的格式,常用的是:键=值

  下面是它的常用方法:

1. 构造函数Properties() //创建一个无默认值的空属性列表。
2. String getProperty(String key) //获取指定键key的键值,以字符串的形式返回。
3. void load(InputString inStream) //从输入流中读取属性列表。
4. void setProperty(String key, String value) //设置对象中key的键值。
5. void store(OutputStream outStream, String comments) //根据comments写入putStream。
6. void list(PrintStream out) //将属性列表输出到指定的输出流。
7. Set<String> stringPropertyName() //返回属性列表的键集,存入Set集合

  下面的一段程序演示了Properties类常用方法的使用:

public class PropertiesSample {

     public static void main(String args[]) throws Exception {  

          //创建空参数对象

                Properties prop = new Properties();  

          //创建字节输入流对象

                FileInputStream fis =   

            new FileInputStream("sample1.properties");  

          prop.load(fis);  

          prop.list(System.out);    

          String foo = prop.getProperty("foo");

          String fu = prop.getProperty("fu");

          System.out.println("foo = " + foo);

          System.out.println("fu = " + fu);

          FileOutputStream fos =

              new FileOutputStream("sample1.properties");

          prop.setProperty("foo", "fooValue55");

          prop.setProperty("fu", "fuValue55");

          prop.put("testkey1", "testvalue");

          prop.store(fos, "store properties to sample1.properties");

          FileInputStream fis1 =   

                new FileInputStream("sample1.properties");  

          prop.load(fis1);  

          prop.list(System.out);

        }   

}

3、打印流

      在整个IO包中,打印流是输出信息最方便的类,主要包含字节打印流(PrintStream)和字符打印流(PrintWriter).打印流提供了非常方便的打印功能,可以打印任何的数据类型。例如:小数、整数、字符串等等。

  字节打印流PrintStream的构造方法中可接收的参数类型:File对象、字符串路径String和字符输出OutputStream。

  字符串打印流PrintWriter的构造方法中可接受的参数类型:File对象、字符串路径String、字节输出流OutputStream和字符输出流Writer。

  下面是一段示例代码:通过键盘录入数据,打印到控制台,要求使用打印流。

public class PrintStreamDemo 

{ 

    public static void main(String[] args) throws IOException { 

        BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));              

        //参数true表示是否自动flush,true为自动

              PrintWriter pw = new PrintWriter(new FileWriter("haha.txt"),true); 

        String line = null; 

              while ((line=bufr.readLine())!=null) 

        { 

            if("over".equals(line)) 

                break;

 //pw.write(line.toUpperCase());//不能换行

                     //可以用println ,能换行,而newLine是BufferedWriter的方法

            pw.println(line.toUpperCase());        

        } 

        bufr.close(); 

        pw.close(); 

    } 

} 

4、序列流

  SequenceInputStream对多个流进行合并。也被称为合并流。常见合并多个流文件步骤:

  1. 创建Vector集合,并将流对象添加进集合
  2. 用Vector的elements()创建Enumeration对象,将集合元素加入。
  3. 创建SequenceInputStream对象,合并流对象
  4. 创建写入流FileOutputStream对象关联写入文件
  5. 利用SequenceInputStream对象和FileOutputStream对象读数据进行反复读写操作。

  下面是一段示例代码:把三个文件合并成一个文件。

class  SequenceInputStreamDemo  { 

public static void main(String[] args)throws IOException  { 

     //创建vector集合,并添加相关流对象 

     Vector<InputStream> vector = new Vector<InputStream>();

     vector.add(new FileInputStream("book1.txt")); 

     vector.add(new FileInputStream("book2.txt")); 

     vector.add(new FileInputStream("book3.txt")); 

     //创建枚举对象 

     Enumeration<InputStream> en = vector.elements();

     SequenceInputStream sis=new SequenceInputStream(en);

     FileOutputStream fos=new FileOutputStream("book4.txt");

     //读写操作 

     byte[] by=new byte[1024]; 

     int len=0; 

     while((len=sis.read(by))!=-1) { 

            fos.write(by,0,len); 

     }
     //关闭流对象 

     sis.close(); 

    fos.close(); 

    } 

}

三、总结

  本文介绍了能够操作文件和文件夹的File类,以及能够打印任何数据的打印流,还有操作键值对配置文件的Properties类,最后讲述了能够合并多个流的 SequenceInputStream,希望对大家有所帮助。

时间: 2024-10-13 20:53:48

黑马程序员-java基础-IO(二)的相关文章

黑马程序员——Java基础---IO(二)---IO字节流、流操作规律

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! -------   字节流 一.概述 1.字节流和字符流的基本操作是相同的,但字节流还可以操作其他媒体文件. 2.由于媒体文件数据中都是以字节存储的,所以,字节流对象可直接对媒体文件的数据写入到文件中,而可以不用再进行刷流动作. 3.读写字节流:Inpu

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正

黑马程序员——java基础---IO(input output)流字符流

黑马程序员——java基础---IO(input output)流字符流 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- io(input output)流特点: 1,io流用来处理数据之间的传输 2,java对数据的操作是通过流的方式: 3,java用于操作流的对象都在io包中: 4,流按操作数据分为两种:字节流和字符流: 5,流按流向分为:输入流和输出流. 注意:流只能操作数据,而不能操作文件. 3.IO流的常用基类: 1)字节流的抽象

黑马程序员——Java基础---io(上)

黑马程序员——Java基础---io(上) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java I/O系统负责处理程序的输入和输出,I/O类库位于java.io包中,它对各种常见的输入流和输出流进行了抽象.如果数据流中最小的数据单元是字节,那么称这种流为字节流:如果数据流

黑马程序员——Java基础--IO流(一)---字符流和字节流

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.IO流的介绍及体系 IO流用来处理设备之间的数据传输.java对数据的操作是通过流的方式.java用于操作流的对象都在IO包中. 输入流和输出流相对于内存设备而言:将外设中的数据读取到内存中:输入.将内存中的数据写出到外设中:输出. 流按照操作数据分为两种:字节流和字符流. 字符流的由来:其实就是字节流读取文字字节数据后,不直接操作而是先查指定的编码表,获取对应的文字,再对这个文字进行操作

黑马程序员——Java基础语法(二)---流程控制

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 本文主要介绍java基础语法中的流程控制,流程控制是我们写出灵活代码的基础.常见的流程控制主要有四类:判断结构.选择结构.循环结构.其他控制结构 一.判断结构 判断结构的标志是if语句,if语句主要有三种表现形式: 1.if(条件表达式) { 执行语句 } 注意: 1.如果if语句中只有一条语句,那么可以不写大括号.不过初学者一定要写括号,以免出错. 2.如果if语句没写大括号,if就只能控制

黑马程序员——Java基础——IO流(二)——File类、Properties类、打印流、序列流

第一件 File类 一.File类 a.用于将文件或者文件夹封装成对象 b.方便对文件与文件夹的属性信息进行操作 c.File对象可以作为参数传递给流的构造函数 d.了解File类中的常用方法 二.File对象的创建 a.File f=new File("a:\\a.txt"): b.File f2=new File("C:\\abc","a.txt");//分开的好处是后一个参数能够使用其他对象如string c.File d=new File

黑马程序员——Java基础--IO流(一)---File类以及其他流对象

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.File类 File类是将文件系统中的文件和文件夹封装成了对象.提供了更多的属性和行为可以对这些文件和文件夹进行操作.这些是流对象办不到的,因为流只操作数据.File对象可以作为参数传递给流对象的构造函数.File 类的实例是不可变的:也就是说,一旦创建,File 对象表示的抽象路径名将永不改变. 1.File类中的方法 (1).File类的构造方法以及字段 1 new File(Stri

黑马程序员——Java基础--IO(三)

-----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 第三讲 总结(常见代码重要知识点) 一.字节输入流 示例1. package cn.itheima.FileInputStream; import java.io.FileInputStream; import java.io.IOException; /* * 字节输入流读取任意文件 * 创建FileInputStream 对象,传递字符串文件名 * 调用父类方法read读取