[求助]JAVA文件操作的一个问题
//源码是这样的:import java.awt.*;
import java.awt.event.*;
import java.net.*;
import javax.swing.*;
import java.io.*;
import java.lang.*;
public class URLRead extends JFrame
{
public static void main(String []args){ new URLRead();}
JPanel jp;
Label lb=new Label();
TextField tf=new TextField();
Button btn=new Button();
TextArea ta=new TextArea();
public URLRead()
{
jp=(JPanel)this.getContentPane();
jp.setLayout(null);
this.setSize(new Dimension(800,600));
this.setResizable(false);
this.setTitle("读取网络资源");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
lb.setText("URL name:");
lb.setBounds(new Rectangle(40,6,65,22));
tf.setText("http://www.haokan123.com");
tf.setBounds(new Rectangle(140,3,246,24));
btn.setLabel("Read");
btn.setBounds(new Rectangle(323,4,65,24));
btn.addMouseListener(new myMouseAdapter());
ta.setText("输入网址,读取网上的源文件");
ta.setBounds(new Rectangle(30,42,750,500));
jp.add(btn,null);
jp.add(lb,null);
jp.add(tf,null);
jp.add(ta,null);
this.setVisible(true);
}
class myMouseAdapter extends MouseAdapter
{
public void mouseClicked(MouseEvent e)
{
String str1="";ta.setText("正在读取网络数据...");
try
{
byte[]buf=new byte;
URL url=new URL(tf.getText());
File tmp=File.createTempFile("url",".tmp");
tmp.deleteOnExit();
BufferedInputStream urlReader=new BufferedInputStream(url.openStream());
BufferedOutputStream urlWriter=new BufferedOutputStream(new FileOutputStream(tmp));
while((urlReader.read(buf))!=-1){urlWriter.write(buf);}
urlWriter.flush();
urlReader.close();
urlWriter.close();
ta.setText("");
BufferedReader temp=new BufferedReader(new FileReader(tmp));
while((str1=temp.readLine())!=null){str1+="\n ";ta.append(str1);}
}catch(Exception ex){JOptionPane.showMessageDialog(null,"Something wrong!");}
}
}
}
//问题是:读取网页源码的结果,会有多余的文字,如读"http://www.haokan123.com",结果是......</html>"javascript" SRC="http://is.qq.com/js/addportal.js"></SCRIPT>
<SCRIPT>AddPortal......
我知道问题出在"BufferedInputStream urlReader=new BufferedInputStream(url.openStream());
BufferedOutputStream urlWriter=new BufferedOutputStream(new FileOutputStream(tmp));
while((urlReader.read(buf))!=-1){urlWriter.write(buf);}"
我试过用BufferedReader,结果完全正确.
但我不明白这个程序为什么会这样?
请高手解答 “
while((urlReader.read(buf))!=-1){urlWriter.write(buf);}
”
基本上这里是程序的中心了 :把url的那个页面内容 用 buf 全部读入 tmp 文件, 后面那步
“while((str1=temp.readLine())!=null){str1+=\"\\n \";ta.append(str1);}”
也只是把整个tmp文件的String搬到 ta 里面显示。
似乎程序没有其他的对读入网页源码的操作了, 而且
“......</html>\"javascript\" SRC=\"http://is.qq.com/js/addportal.js\"></SCRIPT>
<SCRIPT>AddPortal......
”
应是属于源码的一部分, 可以用IE的打开源码来看到的..
\"BufferedInputStream urlReader=new BufferedInputStream(url.openStream());
BufferedOutputStream urlWriter=new BufferedOutputStream(new FileOutputStream(tmp));
\"
这一段只是将url的数据流与urlReader 接上,将临时文件tmp与urlWriter 接上而已。
程序输出是正确的:) 不要看得懂程序就回复.
代码是我写的,我知道它的过程,我不明的是它为什么
\"//问题是:读取网页源码的结果,会有多余的文字,如读\"http://www.haokan123.com\",结果是......</html>\"javascript\" SRC=\"http://is.qq.com/js/addportal.js\"></SCRIPT>
<SCRIPT>AddPortal......
\"?
正确的结果是\"......</html>\"
后面多余的代码是如何产生的??
用另外方法我也可以正确读取数据,我只想知道
为什么会这样? quite sorry..........没仔细看问题....呵呵。。。
...恩...应该是读到 </html> 就结束了.......
\"
while((urlReader.read(buf))!=-1){urlWriter.write(buf)
\"
这一段我想没问题......</html>后面还有字串,感觉是在最后用urlWriter.flush()往tmp里写之前, tmp里已经被写入了东西.....
想问下
BufferedOutputStream urlWriter=new BufferedOutputStream(new FileOutputStream(tmp));“
这段定义, 为何 内层 会用 \"FileOutputStream\"....
=====
我想可以在 while((urlReader.read(buf))!=-1){urlWriter.write(buf);} 处加个Debug, 看看urlReader读入的总的数据是否正确(略去urlWriter不用,用个简单String记录)。。。。。
====
那个Flush()函数不是太确定, BufferedStream 是否可能在使用Flush之前就已往tmp里写入了数据( 读入的data 超过buffer 了 ?? ), 导致使用Flush后重复写入... ? 想问下
BufferedOutputStream urlWriter=new BufferedOutputStream(new FileOutputStream(tmp));“
这段定义, 为何 内层 会用 \"FileOutputStream\"....
我试过用其它去构造都不行.我想应该是因为BufferedOutputStream这个构造方法要求一个OutputStream的对象,所以只能给它一个OutputStream对象.
至于flush()的问题,我也试过,去掉这个,结果不变.
尝试有String去做,但Byte转为String,结果可想而知.
我怀疑是
while((urlReader.read(buf))!=-1){urlWriter.write(buf);}
出了问题,但我查JDK,又找不出什么来,
呀
页:
[1]