IO简单示例

File

用于对磁盘上的文件或目录进行操作

直接父类是Object

 

 

创建一个文件

public class FileTest

{

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

    {

       File file = new File("C:/text.txt");

      

       System.out.println(file.createNewFile());

    }

}

 

在一个目录下创建文件

public class FileTest2

{

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

    {

       File file = new File("C:/abc");

      

       File file2 = new File(file,"hello.txt");

      

       System.out.println(file2.createNewFile());

      

       File file3 = new File(file,"xyz/world.txt");

      

       System.out.println(file3.createNewFile());

    }

}

 

 

创建目录操作

public class FileTest3

{

    public static void main(String[] args)

    {

       File file = new File("C:/abc/xyz/hello");

      

       System.out.println(file.mkdirs());

      

       System.out.println(file.isDirectory());

    }

}

 

 

列出指定目录下的文件或目录

public class FileTest4

{

    public static void main(String[] args)

    {

       File file = new File("C:/java");

      

       String[] names  = file.list();

      

       for(String name: names)

       {

           System.out.println(name);

       }

      

       File[] files = file.listFiles();

      

       for(File f : files)

       {

           System.out.println(f.getName());

           System.out.println(f.getParent());

       }

    }

}

 

 

文件删除操作

public class FileTest5

{

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

    {

       File file = new File("C:/abc/xyz/hello/text.txt");

      

       //file.createNewFile();

      

       boolean delete = file.delete();

      

       System.out.println(delete);

    }

}

 

 

文件名过滤操作

public class FileTest6

{

    public static void main(String[] args)

    {

       File file = new File("C:/java");

      

       /*String[] names = file.list();

      

       for(String name : names)

       {

           if(name.endsWith(".java"))

           {

              System.out.println(name);

           }

       }*/

      

       String[] names = file.list(new FilenameFilter()

       {

           @Override

           public boolean accept(File dir, String name)

           {

              if(name.endsWith(".java"))

              {

                  return true;

              }

              return false;

           }

       });

      

       for(String name : names )

       {

           System.out.println(name);

       }

    }

}

 

 

文件分隔符的使用

public class FileTest7

{

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

    {

       //不加盘符表示java安装的默认盘

       File file = new File(File.separator + "helo.txt");

      

       System.out.println(file.createNewFile());

    }

}

 

 

递归的使用(关键在于要先指定一个出口,才不会出现死循环)

public class Test1

{

    public static int calc(int num)

    {

       if(num ==1 )

           return 1;

       else

           return num * calc(num - 1);

    }

 

    public static void main(String[] args)

    {

       System.out.println(calc(5));

    }

}

 

 

斐波那契数列

public class Fabonaci

{

    public int calc(int pos)

    {

       if(1 == pos || 2 == pos)

           return 1;

       else

           return calc(pos-1)+calc(pos-2);

    }

   

    private void sysout()

    {

       Fabonaci fab = new Fabonaci();

       fab.calc(30);

    }

}

 

 

删除指定目录下的所有文件(用递归实现)

public class FileTest8

{

    public static void deleteAll(File file)

    {

       if(file.isFile() || 0 == file.list().length)

       {

           file.delete();

       }

       else

       {

           File[] files = file.listFiles();

          

           for(File f : files)

           {

              deleteAll(f);

              f.delete();

           }

       }

    }

   

    public static void main(String[] args)

    {

       File file = new File("C:/test");

      

       try

       {

           deleteAll(file);

       }

       catch (Exception e)

       {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

    }

}

 

 

 

把指定目录下的文件结构以树的形式打印出来

public class FileTest9

{

    // 判断目录或文件所在的层数

    private static int times;

 

    // 把目录下的文件以树结构的形式打印出来。

    static void treeShow(File file)

    {

       if (file.isFile() || 0 == file.listFiles().length)

       {

           return;

       }

       else

       {

           File[] files = file.listFiles();

 

           files = sortFile(files);

 

           for (File f : files)

           {

              StringBuffer sb = new StringBuffer();

 

              if (f.isDirectory())

              {

                  sb.append(getTAbs(times));

                  sb.append(f.getName());

                  sb.append("\\");

              }

              else

              {

                  sb.append(getTAbs(times));

                  sb.append(f.getName());

              }

 

              System.out.println(sb);

 

              if (f.isDirectory())

              {

                  times++;

                  treeShow(f);

                  times--;

              }

           }

       }

    }

 

    // 取得每个目录或文件所处层数的缩进

    private static String getTAbs(int times)

    {

       StringBuffer sb = new StringBuffer();

       for (int i = 0; i < times; i++)

       {

           sb.append("\t");

       }

 

       return sb.toString();

    }

 

    // 把目录下所有文件以目录为先的次序排序

    private static File[] sortFile(File[] files)

    {

       List<File> list = new ArrayList<File>();

       for (File f : files)

       {

           if (f.isDirectory())

           {

              list.add(f);

           }

       }

       for (File f : files)

       {

           if (f.isFile())

           {

              list.add(f);

           }

       }

 

       return list.toArray(new File[files.length]);

    }

 

    public static void main(String[] args)

    {

       File file = new File("C:/xdict");

       treeShow(file);

    }

}

 

 

Stream

 

从功能上分:输入流(InputStream)和输出流(OutputStream

从结构上分:字节流(Byte Streams)和字符流(Character Streams)

 

字节流输入输出的基础是抽象类InputStreamOutputStream

字符流输入输出的基础是抽象类ReaderWriter

 

流的分类:

节点流:从特定的地方读写的流类。

过滤流:使用节点流作为输入或输出。过滤流是使用一个已存在的输入流或输出流连接创建的。

字节流的使用

 

FileInputStream类的使用

public class InputStreamTest

{

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

    {

       InputStream is = new FileInputStream("c:/hello.txt");

 

       byte[] buffer = new byte[200];

 

       int length = 0;

 

       if (-1 != (length = is.read(buffer, 0, 200)))

       {

           String str = new String(buffer, 0, length);

           System.out.println(str);

       }

 

       is.close();

    }

}

 

FileOutputStream类的使用

public class OutputStreamTest

{

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

    {

       OutputStream os = new FileOutputStream("c:/out.txt",true);

      

       String str = "\nwelcomle";

      

       byte[] buffer = str.getBytes();

      

       os.write(buffer);

      

       os.close();

    }

}

 

 

BufferedInputStream类,继承自FilterInputStream

 

 

 

BufferedOutputStream类,继承自FilterOutputStream

public class BufferedOutputStreamTest

{

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

    {

       OutputStream os = new FileOutputStream("1.txt");

      

       BufferedOutputStream bos = new BufferedOutputStream(os);

      

       bos.write("http://www.sina.com.cn".getBytes());

      

       bos.close();

       os.close();

    }

}

 

 

ByteArrayInputStream

public class ByteArrayInputStreamTest

{

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

    {

       String str = "abcdef";

      

       byte[] byteArr = str.getBytes();

      

       ByteArrayInputStream bais = new ByteArrayInputStream(byteArr);

      

       int c;

      

       //一次只读一个字符

       while(-1 != (c = bais.read()))

       {

           if(0==c)

           {

              System.out.println((char)c);

           }

           else

           {

              System.out.println(Character.toUpperCase((char) c));

           }

       }

      

       bais.close();

    }

}

 

 

ByteArrayOutputStream

public class ByteArrayOutputStreamTest

{

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

    {

       String str = "hello world welcome";

      

       byte[] arr = str.getBytes();

      

       ByteArrayOutputStream baos = new ByteArrayOutputStream();

      

       //把字节数组写入到字节数组输出流中

       baos.write(arr);

      

       //从字节数组输出流中得到字节数组

       byte[] result = baos.toByteArray();

      

       for(byte b : result)

       {

           System.out.println((char)b);

       }

      

       OutputStream os = new FileOutputStream("c:/test.txt");

      

       //把字节数组写入到文件中。

       baos.writeTo(os);

      

       baos.close();

       os.close();

    }

}

 

 

DataInputStream类,继承自FilterInputStream

 

 

 

DataOutputStream类,继承自FilterOutputStream

public class DataOutputStreamTest

{

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

    {

       DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("data.txt")));

      

       byte b = 3;

       int i = 12;

       char c = 'c';

       float f = 0.3f;

      

       dos.writeByte(b);

       dos.writeInt(i);

       dos.writeChar(c);

       dos.writeFloat(f);

      

       dos.close();

      

       DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream("data.txt")));

      

       System.out.println(dis.readByte());

       System.out.println(dis.readInt());

       System.out.println(dis.readChar());

       System.out.println(dis.readFloat());

      

       dis.close();

    }

}

 

 

 

自定义一个ByteArrayInputStream

public class MyOwnStream

{

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

    {

       byte[] bytes = new byte[16];

       for (int i = 0; i < bytes.length; i++)

       {

           bytes[i] = (byte) i;

       }

 

       MyInputStream myis = new MyInputStream(bytes);

 

       int c = 0;

       while (true)

       {

           if (-1 == (c = myis.read()))

           {

              break;

           }

           System.out.print(c + " ");

       }

 

       myis.close();

    }

}

 

// 这里使用了装饰者模式

class MyInputStream extends InputStream

{

    protected byte[] buffer;

    protected int ptr = 0;

 

    public MyInputStream(byte[] bytes)

    {

       buffer = bytes;

    }

 

    @Override

    public int read() throws IOException

    {

       return (ptr < buffer.length) ? buffer[ptr++] : -1;

    }

}

 

重写InputStream类方法完整的例子

public class MyOwnStream2 extends InputStream

{

    protected byte[] data;

    protected int ptr = 0;

    protected int mark = 0;

 

    public MyOwnStream2(byte[] bytes)

    {

       this.data = bytes;

    }

 

    @Override

    public int read() throws IOException

    {

       return (ptr < data.length) ? data[ptr++] : -1;

    }

 

    @Override

    public int read(byte[] b, int off, int len) throws IOException

    {

       if (ptr > data.length || len < 0)

       {

           return -1;

       }

       if ((ptr + len) > data.length)

       {

           len = data.length - ptr;

       }

       if (0 == len)

       {

           return 0;

       }

 

       System.arraycopy(data, ptr, b, off, len);

       ptr += len;

       return len;

    }

 

    @Override

    public long skip(long n) throws IOException

    {

       return super.skip(n);

    }

 

    @Override

    public int available() throws IOException

    {

       return data.length - ptr;

    }

 

    @Override

    public void close() throws IOException

    {

       ptr = data.length;

    }

 

    @Override

    public synchronized void mark(int readlimit)

    {

       this.mark = readlimit;

    }

 

    @Override

    public synchronized void reset() throws IOException

    {

       if (mark > 0 || mark < data.length)

       {

           throw new IOException("The position is invalid.");

       }

 

       ptr = mark;

    }

 

    @Override

    public boolean markSupported()

    {

       return true;

    }

}

 

 

字符流的使用

 

InputStreamReader

 

OutputStreamWrite

public class StreamTest

{

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

    {

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

 

       OutputStreamWriter osw = new OutputStreamWriter(fos);

 

       BufferedWriter bw = new BufferedWriter(osw);

 

       bw.write("http://www.google.com");

       bw.write("\n");

       bw.write("http://www.baidu.com");

 

       bw.close();

 

       FileInputStream fis = new FileInputStream("file.txt");

 

       InputStreamReader isr = new InputStreamReader(fis);

 

       BufferedReader br = new BufferedReader(isr);

 

      

       /*System.out.println(br.readLine());

       System.out.println(br.readLine());

       System.out.println(br.readLine());*/

      

       String str = br.readLine();

       while(null != str)

       {

           System.out.println(str);

           str = br.readLine();

       }

 

       br.close();

    }

}

 

 

BufferedReader

public class StreamTest2

{

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

    {

       InputStreamReader isr = new InputStreamReader(System.in);

      

       BufferedReader br = new BufferedReader(isr);

      

       String str;

      

       while(null != (str = br.readLine()))

       {

           System.out.println(str);

       }

      

       br.close();

    }

}

 

BufferedWrite

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

 

       OutputStreamWriter osw = new OutputStreamWriter(fos);

 

       BufferedWriter bw = new BufferedWriter(osw);

 

       bw.write("http://www.google.com");

       bw.write("\n");

       bw.write("http://www.baidu.com");

 

       bw.close();

 

 

 

FileReader

public class FileReaderTest

{

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

    {

       FileReader fr = new FileReader("src/com/anllin/io3/FileReaderTest.java");

      

       BufferedReader br = new BufferedReader(fr);

       

       String str ;

       while(null != (str = br.readLine()))

       {

           System.out.println(str);

       }

      

       br.close();

    }

}

 

FileWriter

public class FileWriteTest

{

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

    {

       String str = "hello world welcome nice bueaty";

      

       char[] buffer = new char[str.length()];

      

       str.getChars(0,str.length(),buffer,0);

      

       FileWriter fr = new FileWriter("file2.txt");

      

       fr.write(buffer);

      

       fr.close();

    }

}

 

 

CharArrayReader

public class CharArrayReaderTest

{

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

    {

       String str = "abcdefghijklmnopqrstuvwxyz";

      

       char[] buffer = new char[str.length()];

      

       str.getChars(0, str.length(),buffer,0);

      

       CharArrayReader car = new CharArrayReader(buffer);

      

       int i ;

      

       while(-1 != (i = car.read()))

       {

           System.out.println((char)i);

       }

      

       car.close();

    }

}

 

 

字符集的分类:

ASCII     GB2312        GBK       Unicode         iso-8859- 1     UTF-8

public class CharsetTest

{

    public static void main(String[] args)

    {

       SortedMap<String,Charset> map = Charset.availableCharsets();

      

       Set<String> set = map.keySet();

      

       for(Iterator<String> iter = set.iterator(); iter.hasNext();)

       {

           System.out.println(iter.next());

       }

    }

}

 

 

RandomAccessFile类,可以随机对文件进行读写操作。

public class RandomAccessFileTest

{

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

    {

       Person p = new Person(1, "anllin", 170);

 

       RandomAccessFile raf = new RandomAccessFile("person.txt", "rw");

 

       p.write(raf);

 

       raf.seek(0);//让读的位置回到文件的开头

 

       Person p2 = new Person();

 

       p2.read(raf);

 

       System.out.println(p2.getId() + ", " + p2.getName() + ", "

              + p2.getHeight());

    }

}

 

class Person

{

    int id;

    String name;

    double height;

 

    public Person()

    {

 

    }

 

    public Person(int id, String name, double height)

    {

       this.id = id;

       this.name = name;

       this.height = height;

    }

 

    public int getId()

    {

       return id;

    }

 

    public void setId(int id)

    {

       this.id = id;

    }

 

    public String getName()

    {

       return name;

    }

 

    public void setName(String name)

    {

       this.name = name;

    }

 

    public double getHeight()

    {

       return height;

    }

 

    public void setHeight(double height)

    {

       this.height = height;

    }

 

    public void write(RandomAccessFile raf) throws Exception

    {

       raf.writeInt(id);

       raf.writeUTF(name);

       raf.writeDouble(height);

    }

 

    public void read(RandomAccessFile raf) throws Exception

    {

       this.id = raf.readInt();

       this.name = raf.readUTF();

       this.height = raf.readDouble();

    }

}

 

posted @ 2011-08-17 22:04  水之原  阅读(267)  评论(0编辑  收藏  举报