对输入输出流和文件操作实在有些弄不清楚。

xiars123 2011-06-02 04:41:37
请问我的一个程序
package URLUtil;

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

public class URLUtil {
public static String getHtml(String urlString) {
try {
StringBuffer html = new StringBuffer();
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStreamReader isr = new InputStreamReader(conn.getInputStream());
BufferedReader br = new BufferedReader(isr);
String temp;
while ((temp = br.readLine()) != null) {
html.append(temp).append("\n");
}
br.close();
isr.close();
return html.toString();
}
catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) throws IOException {
FilterTags ft = new FilterTags();
String s = ft.getFilterTags(URLUtil.getHtml("http://www.sina.com.cn"));
System.out.println(s);
BufferedWriter bw = new BufferedWriter(new FileWriter("d:/doc/temp.txt"));
bw.write(s);
bw.close();
}
}
输入的网址会放在一个txt文件里面,以
http://www.baidu.com
http://www.google.com.hk
http://www.sina.com.cn
这样单行排列的形式给出
要让结果变成以 http://后面的网址为标题的txt文件,分别输出
请问应该怎么改进?
...全文
208 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiars123 2011-06-03
  • 打赏
  • 举报
回复
谢谢楼上朋友的帮助,自己对文件操作和输入输出流方面还不是很熟悉,还需要多加练习。
hy158753228 2011-06-03
  • 打赏
  • 举报
回复
...都封装成静态工具方法了,拿来直用的,都还不懂。 =。=
我怀疑你不是不懂,而是懒得看代码!
manyroads 2011-06-03
  • 打赏
  • 举报
回复
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(args[0])));
String url = null;
String content = null;
BufferedWriter bw = null;
while((url = br.readLine()) != null){
content = URLUtil.getHtml(url);
System.out.println(content);
bw = new BufferedWriter(new FileWriter("d:/" + url.substring(7) + ".txt"));
bw.write(content);
bw.close();
}
br.close();
}
xiars123 2011-06-03
  • 打赏
  • 举报
回复
楼上这个看得不是很懂啊,我连
FilterTags ft = new FilterTags();
这个 信息文本化的类 往哪儿加都不知道。。
最好还是能基于1楼给的代码改进一下
hy158753228 2011-06-03
  • 打赏
  • 举报
回复
那就继续啦 :
urls.txt文件内容:
http://www.baidu.com
http://www.google.com.hk
http://www.sina.com.cn
代码如下:

package csdn.impulsehu.june;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class URLUtil {
public static void main(String[] args) {
List<String> urls = getURLFromFile(new File("urls.txt"));
for(String url : urls) {
pageContentToLocalFile(url, new File(url.substring(7)+".txt"));
}
}

public static void pageContentToLocalFile(String sourceUrl, File destFileName) {
URL url = null;
InputStream is = null;
BufferedReader br = null;
FileWriter fw = null;
BufferedWriter bw = null;
try {
url = new URL(sourceUrl);
is = url.openConnection().getInputStream();
br = new BufferedReader(new InputStreamReader(is));
if(destFileName != null) {
fw = new FileWriter(destFileName);
} else {
fw = new FileWriter(new File("temp.tmp"));
}
bw = new BufferedWriter(fw);

String line;
while(null != (line = br.readLine())) {
System.out.println(line);
bw.write(line);
bw.newLine();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeIOStream(bw, fw, br, is);
}

}

private static List<String> getURLFromFile(File file) {
List<String> urls = new ArrayList<String>();
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(file);
br = new BufferedReader(fr);
String line;
while(null != (line = br.readLine())) {
System.out.println(line.trim());
urls.add(line.trim());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(null != fr) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
return urls;
}

private static void closeIOStream(BufferedWriter bw, FileWriter fw,
BufferedReader br, InputStream is) {
if(null != bw) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(null != fw) {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(null != is) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
}
}
}

}

Randy0098 2011-06-02
  • 打赏
  • 举报
回复
你一个网址会读,怎么多个就不会了呢,不就是把String s = ft.getFilterTags(URLUtil.getHtml("http://www.sina.com.cn"));中的“http://www.sina.com.cn”作为参数放在一个单独文件里了吗?
循环做不就解决问题了
1、用字符流readline读取每一行网址数据A
2、根据网址A抓取网页内容
3、生成网页内容文件File,以你想要的任何命名形式,生成命名不就是个对A的字符串操作
xiars123 2011-06-02
  • 打赏
  • 举报
回复
就是要用http://后面的这部分啊
healer_kx 2011-06-02
  • 打赏
  • 举报
回复
网址不能成为标题,因为含有 / 和 : 两个字符,不能是文件名的一部分。
你需要把URL转义,或者只用 www.baidu.com 这个部分。(我建议这个。)

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧