java nullpointerexpection

package tester;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class Tes {
public static void main(String[]ra)throws IOException
{
try {
URL url1=new URL("http://www.qidian.com");
InputStream in=url1.openStream();
InputStreamReader inr=new InputStreamReader(in,"utf-8");
BufferedReader br=new BufferedReader(inr);
String data=br.readLine();
FileWriter fr=new FileWriter("C:\Users\lenovo\Desktop\起点.txt");
BufferedWriter ws=new BufferedWriter(fr);
ws.write(data);
while(data!=null)
{
System.out.println(data);
data=br.readLine();
ws.write(data);
}
ws.flush();
ws.close();
fr.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

Exception in thread "main" java.lang.NullPointerException
at java.io.Writer.write(Unknown Source)
at tester.Tes.main(Tes.java:28)

while(data!=null)
{
System.out.println(data);
data=br.readLine();
if(data != null){
ws.write(data);
}
}
加一个if判断

FileWriter fr=new FileWriter("C:\Users\lenovo\Desktop\起点.txt");
BufferedWriter ws=new BufferedWriter(fr);
ws.write(data);
这怎么还有个ws.write(data);

空指针异常,输出一下变量,看看那个变量为null了

URL读取链接地址有问题,logger一下看看

while(data!=null)
{
System.out.println(data);
data=br.readLine();
ws.write(data);
}
这段代码有问题,改为:
while((data=br.readLine())!=null)
{
System.out.println(data);
ws.write(data);
}
应该就正确了



 while(data!=null)  把条件改成 br.readLine()!=null你是先判断data后再给他赋值的
 {
 System.out.println(data);
 data=br.readLine();
 ws.write(data);
 }

public static void main(String[] args) {
InputStream in = null;
try {

       /* InputStreamReader inr = new InputStreamReader(in, "utf-8");
        BufferedReader br = new BufferedReader(inr);
        String data = br.readLine();
        FileWriter fr = new FileWriter("C:\\Users\lenovo\Desktop\\u8d77\u70b9.txt");
        BufferedWriter ws = new BufferedWriter(fr);
        ws.write(data);
         while (data != null) {
            System.out.println(data);
            data = br.readLine();
            ws.write(data);
        }
        ws.flush();
        ws.close();
        fr.close();*/
        URL url1 = new URL("http://www.sogou.com");
        in = url1.openStream();
        File file=  new File("123456.txt");
        if(!file.exists()){
            file.createNewFile();
        }
        int result = 0 ;
        byte[] buff = new byte [1024] ;
        String info = "";
        StringBuilder results = new StringBuilder();
        while ((result=in.read(buff))!=-1){
            in.read(buff,0,result);
            results.append(new String(buff, "UTF-8"));
        }
        Files.write(Paths.get(file.getName()),new String(results).getBytes() , StandardOpenOption.APPEND);//
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        try {
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

    写入的时间有点问题,大概意思是这样。

String data=br.readLine();
FileWriter fr=new FileWriter("C:\Users\lenovo\Desktop\起点.txt");
BufferedWriter ws=new BufferedWriter(fr);
ws.write(data);
while(data!=null)
{
System.out.println(data);
data=br.readLine();
ws.write(data);
}

在while循环中,data=br.readLine()后,你没有判断data是否为null,就去write(data);

你可以修改为:
String data=br.readLine();
FileWriter fr=new FileWriter("C:\Users\lenovo\Desktop\起点.txt");
BufferedWriter ws=new BufferedWriter(fr);
while(data!=null)
{
System.out.println(data);
ws.write(data);
data=br.readLine();
}

这样每次都是在判断data不为null的情况下,才会去write(data);
貌似大家普遍的写法是:
String data=br.readLine();
FileWriter fr=new FileWriter("C:\Users\lenovo\Desktop\起点.txt");
BufferedWriter ws=new BufferedWriter(fr);
ws.write(data);
while(data!=null)
{
System.out.println(data);
data=br.readLine();
ws.write(data);
}

在while循环中,data=br.readLine()后,你没有判断data是否为null,就去write(data);

你可以修改为:
String data=null;
FileWriter fr=new FileWriter("C:\Users\lenovo\Desktop\起点.txt");
BufferedWriter ws=new BufferedWriter(fr);
while ((data = br.readLine()) != null)
{
System.out.println(data);
ws.write(data);
}

个人感觉按照下面的修改比较好!
修改前:
String data=br.readLine();
FileWriter fr=new FileWriter("C:\Users\lenovo\Desktop\起点.txt");
BufferedWriter ws=new BufferedWriter(fr);
ws.write(data);
while(data!=null)
{
System.out.println(data);
data=br.readLine();
ws.write(data);
}
修改后:
String data="";
FileWriter fr=new FileWriter("C:\Users\lenovo\Desktop\起点.txt");
BufferedWriter ws=new BufferedWriter(fr);
while ((data = br.readLine())!= null)
{
System.out.println(data);
ws.write(data);
}

我只是想说,麻烦下次把行号贴出来……