Java基礎 IO流 File Properties PrintWriter 序列流SequenceInputStream

File類

  • 用來將文件或者文件夾封裝成對象
  • 方便對文件與文件夾進行操作
  • File對象可以作爲參數傳遞給流的構造函數
  • 瞭解File類中的常用方法

文件過濾

import java.io.*;
class FileDemo2
{
    public static void main(String[] args)
    {
        File dir = new File("d:\\");
        FilenameFilter ff=new FilenameFilter(){
            ///dir代表指定的目錄,name 代表目錄內的文件或文件夾名    
            public boolean accept(File dir,String name)
            {
                /* if((name.indexOf("txt"))!=-1)
                    return true;
                return false; */
                return name.endsWith(".txt");
            }
        };
        String[] arr=dir.list(ff);
        System.out.println("len:"+arr.length);
        for(String name : arr)
        {
            System.out.println(name);
        }
    }
}

遞歸

import java.io.*;
class FileDemo3
{
    public static void main(String[] args)
    {
        File dir = new File("d:\\test");
        showDir(dir);
    }
    public static void showDir(File dir)
    {
        System.out.println(dir);
        File[] files = dir.listFiles();

        for(int x=0;x<files.length;x++)
        {
            if(files[x].isDirectory())
                showDir(files[x]);
            else
                System.out.println(files[x]);
        }

    }
}

Properties 簡述

dom4j 工具更簡便。

Properties 是 hashtable的子類
也就是說它具備了map集合的特點。而且它裏邊存儲的鍵值對都是字符串。
是集合中和IO技術相結合的集合容器

該對象的特點:可以用於鍵值對形式的配置文件。

Properties存取

import java.io.*;
import java.util.*;

class PropertiesDemo
{
    public static void main(String[] args)
    {
        setAndGet();
    }
    public static void setAndGet()
    {
        Properties pro=new Properties();
        pro.setProperty("文本顏色","黑色");
        pro.setProperty("文本字體","仿宋");

        //System.out.println(pro);
        String value=pro.getProperty("文本顏色");
        for(String s:pro.stringPropertyNames())
        {
            System.out.println(s+":"+pro.getProperty(s));
        }
    }
}

Properties 存取配置文件

    //將info.txt中鍵值數據存到集合中進行操作.
    public static void loadDemo() throws IOException
    {
        Properties prop=new Properties();
        FileInputStream fis=new FileInputStream("d:\\sysinfo.txt");

        prop.load(fis);
        prop.list(System.out);
        prop.setProperty("user.timezone","zh");
        //System.out.println(prop);
        FileOutputStream fos=new FileOutputStream("d:\\sysinfo.txt");
        prop.store(fos,"comments");
        fis.close();
        fos.close();
    }

PrintStream PrintWriter

  • 打印流:
    • 該流提供了打印方法,可以將各種數據類型的數據都原樣打印。
  • 字節打印流
  • PrintStream
  • 構造函數可以接受的參數類型:

    1. file對象 File
    2. 字符串路徑 String
    3. 字節輸出流 OutputStream
  • 字符打印流

  • PrintWriter
    1. file對象
    2. 字符串路徑
    3. 字節輸出流
    4. 字符輸出流
import java.io.*;

class PrintStreamDemo
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
        //PrintWriter out = new PrintWriter(System.out,true);
        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("d:\\tmp.txt")),true);
        String line=null;
        while((line=bufr.readLine())!=null)
        {
            if("over".equals(line))
                break;
            out.println(line.toUpperCase());
            //out.flush();
        }
        bufr.close();
        out.close();
    }
}

序列流SequenceInputStream

SequenceInputStream 表示其他輸入流的邏輯串聯。它從輸入流的有序集合開始,並從第一個輸入流開始讀取,直到到達文件末尾,接着從第二個輸入流讀取,依次類推,直到到達包含的最後一個輸入流的文件末尾爲止。

import java.io.*;
import java.util.*;
class SequenceDemo
{
    public static void main(String[] args) throws IOException
    {
        Vector<FileInputStream> v = new Vector<FileInputStream>();

        v.add(new FileInputStream("d:\\1.txt"));
        v.add(new FileInputStream("d:\\2.txt"));
        v.add(new FileInputStream("d:\\3.txt"));

        Enumeration<FileInputStream> en = v.elements();

        SequenceInputStream sis = new SequenceInputStream(en);

        FileOutputStream fos = new FileOutputStream("d:\\4.txt");

        byte[] buf = new byte[1024];

        int len=0;

        while((len=sis.read(buf))!=-1)
        {
            fos.write(buf,0,len);
        }
        fos.close();
        sis.close();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章