package tools;
import java.io.*;
import java.io.BufferedInputStream;
import java.nio.charset.Charset;
import java.util.Map;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: </p>
* @author yezh
* @version 1.0
*/
//该类作用读取分割后的天网语料,不管网页是什么都可以
//但当网页中没有charset时,都默认我gbk编码,所以可能也有错误
public class ReadHtml {
private static int num = 40;//charset可能在行数,否则认为没有,默认gbk
private static Map map = Charset.availableCharsets();
public static String ReadAllKindOfCharset(String sfile)
{
String myfile = sfile;
File file = new File(myfile);
return ReadAllKindOfCharset(file);
}
public static String ReadAllKindOfCharset(File file)
{
FileInputStream instream;
String charset = "gbk";
int c;
InputStreamReader reader;
BufferedInputStream bin;
BufferedReader br;
StringBuffer buffer = new StringBuffer(4096);//开始用来寻找charset,然后用来缓存的文件
try {
instream = new FileInputStream(file);
bin = new BufferedInputStream(instream);
bin.mark(bin.available());
for(int i =0; i< num && bin.available() > 0; i++)
{
buffer.setLength(0);
while((c = bin.read()) != -1 && c!=10 && c!= 13)
{
buffer.append((char) c);
//System.out.print((char) c);
}
if(c == 13)//对windows换行的处理
{
bin.read();
}
String line = buffer.toString().toLowerCase();
int pos = line.indexOf("charset");
if( pos != -1)
{
StringBuffer charsetbuffer = new StringBuffer();
for( pos =pos +7; pos < line.length(); pos++)
{
char ch = line.charAt(pos);
if( ch== '=')
{
}
else if(ch == '"' || ch == '\'' || ch == ';' )
{
break;
}
else
{
charsetbuffer.append(ch);
}
}
String tempcharset = charsetbuffer.toString().trim();
if(tempcharset.length()>2)
{
charset = tempcharset;
}
//System.out.println("charset: " + tempcharset);
break;
}
if (c == -1) {
break;
}
}
if (!map.containsKey(charset) || !map.containsValue(charset)) { //不支持时可以在此处理
charset = "gbk";
}
bin.reset();
String line = buffer.toString();
buffer.setLength(0);
//instream = new FileInputStream(file);
//bin = new BufferedInputStream(instream);
reader = new InputStreamReader(bin, charset);
br = new BufferedReader(reader);
while((line = br.readLine()) != null)
{
buffer.append(line + '\n');
}
}
catch (Exception ex) {
System.out.println("读取文件出错");
System.out.println(charset);
}
//System.out.println(buffer.toString());
return buffer.toString();
}
//
public static void processDirectory(String Directory)
{
File dir = new File(Directory);
if(dir.isDirectory())
{
File files[] = dir.listFiles();
for(int i = 0; i < files.length; i++)
{
if(files[i].isFile())
{
ReadAllKindOfCharset(files[i]);
}
else if(files[i].isDirectory())
{
processDirectory(files[i].getName());
}
}
}
}
//测试
public static void main(String args[])
{
long start = System.currentTimeMillis();
System.out.println(ReadHtml.ReadAllKindOfCharset(("luan/arrow.com.cnpdadianyingdefault.asp.htm")));
//ReadHtml.ReadAllKindOfCharset(("luan/编辑1.htm"));
//ReadHtml.processDirectory("D:\\javap\\天网\\myJava\\out");
System.out.println("time = " + (System.currentTimeMillis() - start));
if(Charset.isSupported("gb_2312-80"))
{
System.out.println("true");
System.out.println("·");
}
}
}
分享到:
相关推荐
java读取远程网页乱码解决方案 java读取远程网页乱码解决方案
java读取文件中文乱码
在有网时收藏网页!离线也可以继续读取网页!很用心的哦
Java读取TXT文本文件乱码解决方案.doc
彻底解决JAVA读取写入 TXT中文乱码问题 源码
该项目包含了项目所需要的jar包以及测试案例。项目使用环境为eclipse jdk1.8 1.poi.Testpoi为测试用例;...3.解决了javadbf读取dbf文件表头和数据乱码问题,com.webadmin.util.dbf.DBFReaderTest为测试用例。
Java读取Excel内容 v Java读取Excel内容 Java读取Excel内容
JAVA读取远程网页文件并保存本地 从远程URL地址获取网页文件下载到本地 这个方法可以生成静态HTML文件使用!
本代码实现使用Java程序读取word文档成网页,将word文档按原样在网页输出。项目编码为UTF-8,文件编码也是utf8,再不要说乱码这种骚话了,选择utf8加载项目就不会乱码
JAVA读取 excelJAVA读取 excel
java读取TXT文件入库,java读取TXT文件入库,java读取TXT文件入库,
java读取txt文件,可以以文件路径构造这个流,... 然后使用这个流直接读取到文件,再使用reader构造BufferedReader,按行读取一整行的文本,作为字符串返回: BufferedReader buffReader = new BufferedReader(reader);
JAVA读取视频时间
用Java读取Word文档
Java读取dwg代码演示
NULL 博文链接:https://thinktothings.iteye.com/blog/1536044
java读取文件方法大全 读取file流等技术
java读取局域网共享机器文件 java读取局域网共享机器文件
Java读取串口数据,并可在网页上调用显示读出的数据,动态控制串口