Java的IO操作简单回忆

这次写一下JAVA的IO。

一,首先明确一点:所有字节输入流的父类是java.io.InputStream,所有字节输出流的父类都是jav.io.OutputStream.

1.文件的读和写 使用FileOutputStream和FileInoutStream;

     写文件:

                  FileOutputStream fos=new FileOutputStream("c:\\wenku.txt");

                  String str="you are cool";

                  fos.write(str.getBytes());

                  fos.close();

    很明显,首先打开文件并返回fos这个对象,把字符串getBytes()成字节就可以用fos的write写入了。

                还可以使用PrintStream来写文件

                                PrintStream ps=new PrintStream(new FileOutputStream("c:\\wenku.txt"));

                                  String str="you are cool";

                                  ps.println(str);

                                   ps.close();

                 千万别以为这时打印到屏幕。其实是写入文件了。(仔细想想文件和屏幕都是一种输出是不是,都是把内存里的东西放出来了)

 

   读文件:

             File file=new File("c:/wenku.txt");

             FileInputStream fis=new FileInputStream(file);

             byte[] data=new byte[(int)file.length()];

             fis.read(data);

             fis.close();

             String msg=new String(new String(data));

             System.out.println(msg);

也很清晰,先实例化一个fis对象,因为是字节流嘛,建一个字节数组data[],fis.read(data)这就对到字节数组了。然后就是把字节数组转换成字符串来输出到屏幕就OK了。

 

2.对象的读写 使用ObjectInputStream和ObjectOutputStream

             打开文档 ObjectOutputStream类的最常用的构造函数是:

             public ObjectOutputStream(OutputStream out) throws Exception

             传入一个OutputStream对象,实例化ObjectOutputStream对象,很显然,如果传入的是FileOuutputStream.则存入文件。这也是装饰模式的运用

   写入文件:

假设一个存在的类Person,他必须继承Serializable.即 public class Person implements Serializable{.........    }  。

       File file=new File("c:\\wenku.txt");

        FileOutputStream fos=new FileOutputStream(file);

        ObjectOutputstream oos=new ObjectOutputStream(fos);

        Person per=new Person("man","Mike",19);

         fos.wrteObject(per);

         fos.close();

         oos.close();

和printstream差不多啦。 就是  ObjectOutputstream oos=new ObjectOutputStream(new FileOutputStream(new File("c:\\wenku.txt")));

  

   读入文件

            Person per=null;

            ObjectIntputstream ois=new ObjectInputStream(new FileInputStream(new File("c:\\wenku.txt")));

            per=(Person)ois.readObject();

 二,所有字符输入流的父类都是java.io.Reader,所有字符输出流的父类都是java.io.Writer。

1.写文件

     FileWriter fw=new FileWriter("c:\\wenku.txt");

      String str="you are cool";

      fw.write(str);

      fw.close(); 

特别注意要close(),否则可能无法写入。

 

2.读文件

     FileReader fr=new FileReader(new File("c:\\wenku.txt");

     char[] data=new char[(int)file.length()];

     fr.read(data);

     fr.close();

    String msg=new String(new String(data));

    System.out.println(msg);

                使用BufferedReader读取文件

                             BufferedReader br=new BufferReader(new FileReader(new File("c:\\wenku.txt")));

                             while(true){

                                       String str=br.readLine();

                                         if(str==null){ break; }

                                         System.out.println(str);

                                        }

                                br.close();

 三,键盘输入

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

       String str=br.readLine();

        System.out.println(str);

InputStreamReader就像是BufferedReader和InputStream及其子类的中介。

 

四,网络编程常用:

socket的TCP编程:

用BufferedReader和PrintStream

1,接收消息

          InputStream is=socket.getInputStream();

           BufferedReader br=new BufferedReader(new InputStreamReader(is));

           String str=br.readLine();                  

 2.发出消息

        OutputStream os=socket.getOutputStream();

        PrintStream ps=new PrintStream(os);

        String str="you are cool";

        ps.println(str);

使用DataInputStream和DataOutputStream

           DataInputStream      dis=new DataInputStream (socket.getInputStream());
           DataOutputStream      dos=new DataOutputStream (socket.getOutputStream());

        接受信息 

          String str=new String(dis.readUTF());
             taMsg.append(str+"\n");

        发出信息

           dos.writeUTF(""+tfMsg.getText());

 

还有就是DatagramPacked的UDP编程:

              客户端向服务器发送消息:

            DatagramPacket ds=new DatagramSocket();

            InetAddress add=InetAddress.getByName("127.0.0.1");

            ds.connect(add,9999);

             String msg="hello";

             byte[] data=msg.getBytes();

            DatagramPacket dp=new DatagramPacket(data,data.length);

             ds.send(dp);

服务器接受消息并打印:

        DatagramSocket ds=new DatagrameSocket(9999);

       byte[]  data=new byte[255];

        DatagramPacket dp=new DatagramPacket(data,data.length);

        ds.receive(dp);

        String msg=new String(dp.getData(),0,dp.getLength());

        System.out.println("done"+msg);

 

看看几个类的关系

 

 

 

 

 

 

 

 

 

posted @ 2016-04-22 20:24  给世界一点光  阅读(242)  评论(0编辑  收藏  举报