黑马程序员技术交流社区
标题:
有关PrintWriter和BufferedReader的问题
[打印本页]
作者:
杨宗彬
时间:
2012-8-14 17:17
标题:
有关PrintWriter和BufferedReader的问题
为什么我用PrintWriter的writer方法在一个文件里写z字符串,用BufferedReader的readLine()方法读字符串,非得等我关闭gui界面才能读出来,我加了个测试语句发现,程序只运行到创建BufferedRead()那里,没运行readLine()方法。我结束后才打印出来readLine()里的内容
作者:
尤洋
时间:
2012-8-14 17:25
个人猜测原因是
缺少必要的刷新操作flush()
关闭资源时自带一次刷新
所以,关闭时能读出来
作者:
杨宗彬
时间:
2012-8-14 17:29
printWriter自带刷新,我怕有延迟,我还加了个flush()没用
作者:
徐小骥
时间:
2012-8-14 17:49
用println();打印试试,PrintWriter的println()打印方法就自带换行了
作者:
杨宗彬
时间:
2012-8-14 18:15
本帖最后由 杨宗彬 于 2012-8-14 18:17 编辑
不是在一个文件里面。printWriter写的是在客户端,在服务器端需要读出来写的内容,需要用服务器的inputStream来读吧?PrintWriter包装的是是输出流
用DataInputStream和DataOutputStream能解决这个问题,搞不懂为什么
作者:
黎健东
时间:
2012-8-14 18:19
贴出代码
作者:
杨宗彬
时间:
2012-8-14 18:32
这是客户端
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();
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2