A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨宗彬 中级黑马   /  2012-8-14 17:17  /  2329 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么我用PrintWriter的writer方法在一个文件里写z字符串,用BufferedReader的readLine()方法读字符串,非得等我关闭gui界面才能读出来,我加了个测试语句发现,程序只运行到创建BufferedRead()那里,没运行readLine()方法。我结束后才打印出来readLine()里的内容

6 个回复

倒序浏览
个人猜测原因是
缺少必要的刷新操作flush()
关闭资源时自带一次刷新
所以,关闭时能读出来
回复 使用道具 举报
printWriter自带刷新,我怕有延迟,我还加了个flush()没用
回复 使用道具 举报
用println();打印试试,PrintWriter的println()打印方法就自带换行了
回复 使用道具 举报
本帖最后由 杨宗彬 于 2012-8-14 18:17 编辑

不是在一个文件里面。printWriter写的是在客户端,在服务器端需要读出来写的内容,需要用服务器的inputStream来读吧?PrintWriter包装的是是输出流
用DataInputStream和DataOutputStream能解决这个问题,搞不懂为什么
回复 使用道具 举报
贴出代码
回复 使用道具 举报
这是客户端

package com.yzb;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.AncestorListener;

public class ChatClient extends JFrame {
         JTextArea jta = new JTextArea();
         JTextField jtf = new JTextField();
         Socket s = null;
         //PrintWriter pw = null;
         DataOutputStream dos= null;
         

        public ChatClient() {
                super();
                addWindowListener(new WindowAdapter() {
                        @Override
                        public void windowClosing(WindowEvent e) {
                                super.windowClosing(e);
                                ChatClient.this.disConnect();
                                System.exit(0);
                        }
                });
                this.getContentPane().add(jta, "Center");
                pack();// 调整此窗口的大小,以适合其子组件的首选大小和布局。
                this.getContentPane().add(jtf, "South");
                jtf.addActionListener(new JTFListener());
        }
        
        private class JTFListener implements ActionListener{
                @Override
                public void actionPerformed(ActionEvent e) {
                        String str = jtf.getText().trim();
                        jta.setText(str);
                        jtf.setText("");
                        /*pw.write(str);
                        pw.flush();
                        pw.close();*/
                        try {
                                dos.writeUTF(str);
                                dos.flush();
                        } catch (IOException e1) {
                                e1.printStackTrace();
                        }

                }
        }

        public static void main(String[] args) {

                ChatClient Chat = new ChatClient();
                Chat.setLocation(100, 100);
                Chat.setSize(300, 300);
                Chat.setVisible(true);
                Chat.connect();
        }

        public  void connect() {
                try {
                         s = new Socket("127.0.0.1",8001);
                         dos = new DataOutputStream(s.getOutputStream());
                         //pw = new PrintWriter(s.getOutputStream());
System.out.println("Connected");
                } catch (UnknownHostException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
        }
        
        public void disConnect(){
                //pw.close();
                try {
                        dos.close();
                        s.close();
                } catch (IOException e) {
                        e.printStackTrace();
                }
        }

}
这是服务器
package com.yzb;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class ChatServer {

        
        public static void main(String[] args) {
                boolean started = false;
                try {
                        ServerSocket ss = new ServerSocket(8001);
                        started = true;
                        while(started){
                                boolean bConnect = false;
                                Socket s = ss.accept();
System.out.println("a client is connect");
                                bConnect = true;
                               InputStream is = s.getInputStream();
                                //BufferedReader br = new BufferedReader(new InputStreamReader(is));
                                //System.out.println(br.readLine());
                                DataInputStream dis = new DataInputStream(is);
                                while(bConnect){
                                        System.out.println(dis.readUTF());
                                }
                                //br.close();
                                s.close();
                                dis.close();
                        }
                } catch (IOException e) {
                        e.printStackTrace();
                }
        }

}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马