我要用public String readLine()读取从网络来的数据,读出一行就放到一个StringBuffer里面保存起来,全部读出后返回这个StringBuffer。
问题出现在,while循环老是退不出来,运行到那里就不动了。后面的代码不能执行。
以下是源码:
public String getInfo() {
// String url = tfNorth.getText();
StringBuffer info = new StringBuffer("\r\n");
try {
// Socket s = new Socket(url, 23);
Socket s = new Socket("bbs.nuc.edu.cn", 23);
BufferedReader in = new BufferedReader(new InputStreamReader(s
.getInputStream()));
boolean flag = true;
while (flag) {
String line = in.readLine();
System.out.println(line);
if (line != null || !"".equals(line)) {
info.append(line + "\r\n");
} else {
flag = false;
}
}
System.out.println("读取完毕!");
String result = info.toString();
return result;
} catch (IOException e1) {
e1.printStackTrace();
return null;
}
}
问题出现在,while循环老是退不出来,运行到那里就不动了。后面的代码不能执行。
以下是源码:
public String getInfo() {
// String url = tfNorth.getText();
StringBuffer info = new StringBuffer("\r\n");
try {
// Socket s = new Socket(url, 23);
Socket s = new Socket("bbs.nuc.edu.cn", 23);
BufferedReader in = new BufferedReader(new InputStreamReader(s
.getInputStream()));
boolean flag = true;
while (flag) {
String line = in.readLine();
System.out.println(line);
if (line != null || !"".equals(line)) {
info.append(line + "\r\n");
} else {
flag = false;
}
}
System.out.println("读取完毕!");
String result = info.toString();
return result;
} catch (IOException e1) {
e1.printStackTrace();
return null;
}
}
if(line.equals("")
if条件似乎有问题,试试下面这个:
if(!line.equals(""))
可以通过下面语句设置没有数据的超时时间
s.setSoTimeout(3000); // 3秒没有任何数据,引发 java.net.SocketTimeoutException 异常。
你这样写的话,是null肯定就是空指针异常了。
回java2000_net
这样的话可以换个方式解决,但是没有找到问题所在。
while(flag){
String line = in.readLine();
System.out.println(line); if ("Y".equals(s)||"y".equals(s))
break;//从读入的地方增加特殊字符标志结束循环!
if (line!= null ¦¦!"".equals(line)){
info.append(line+ "\r\n");
}else{
flag = false;
}
}
///我的下边一个例子,看下可以完全解决上面问题:
import java.io.*;
public class ArrayDataCompara {
public static void main(String[] args) {
int = 6;
int max = 0, min = 0, count = 0; int list[] = new int[];
String s;
boolean validResponse = false;
try {
System.out.println("请输入"+list.length+"个整数,并以“y”字符结束输入:");
while (!validResponse) {
//system.INI是包含Windows初始配置信息的重要文件,控制台输入信息时读入的管道
//BufferedReader类unicode为单位进行读写的方法
//通过这个InputStreamReader类可以把这两种方式读取出来的信息相互切换
BufferedReader t = new BufferedReader(new InputStreamReader(System.in));
s = t.readLine();//readLine()读取一文本行。
if ("Y".equals(s)||"y".equals(s))
break;
list[count] = Integer.parseInt(s);
if (list[count] > max) // 判断最大值
max = list[count];
if (list[count] < min) // 判断最小值
min = list[count];
count++;
if (count > )
throw new IOException();
}
System.out.println("\nMaximum is " + max); // 输出最大值
System.out.println("Minimum is " + min); // 输出最小值
} catch (Exception e) {
System.out.println("输入非法的数据类型或超长数组定义长度: " + e);
}
}
}