使用hash拆分文件
package readImgUrl; import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; public class ClassifyUrl { private static int HASHLEN = 100; private static String file_dir = "D:\\学习\\实验室项目\\ImageNet图片爬取\\classify_url\\"; private static String src_file = "D:\\学习\\实验室项目\\ImageNet图片爬取\\fall11_urls.txt"; public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
classify_url("D:\\学习\\实验室项目\\ImageNet图片爬取\\fall11_urls.txt");
// rank_filedata("2"); // String s = judgeFileCode(src_file);
// String s = codeString(src_file);
// System.out.println(s);
} /**
* 对一个文件进行排序
*/
public static void rank_filedata(String filename){
String path1 = file_dir+filename+".txt";
String path2 = file_dir+filename+"_"+".txt";
List<String> list = reader_list(path1);
System.out.println(list.size());
// 排序,通过泛型和匿名类来实现
Collections.sort(list, new Comparator<String>() {
public int compare(String s1, String s2) {
String h1 = s1.split(" ")[1];
String h2 = s2.split(" ")[1];
return h1.compareTo(h2);
}
});
writer_list(list, path2);
}
/**
* 读取文件,返回list
* @param path
* @return
*/
public static List reader_list(String path){
List<String> lineList = new ArrayList();
try {
BufferedReader reader = new BufferedReader(new FileReader(path));
String line = reader.readLine();
while(null != line){
lineList.add(line);
line = reader.readLine();
}
reader.close();
return lineList;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return null;
}
/**
* 将List写入文件
* @param line
*/
public static void writer_list(List list, String path){
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(path));
for(int i=0; i<list.size(); i++){
String line = (String)list.get(i);
writer.write(line+"\r\n");
}
writer.close(); } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
/**
* 从文件中逐行读取数据,分类写入0-99个文件
*/
public static void classify_url(String path){
try {
BufferedReader reader ;
String filecode = judgeFileCode(path);
reader = new BufferedReader(new InputStreamReader(new FileInputStream(path),filecode));
// BufferedReader reader = new BufferedReader(new FileReader(path));
String line = reader.readLine();
int line_num = 0;
// while(line_num<4101000){
// reader.readLine();
// line_num++;
// }
while(null != line){
try {
String host = new URL(line.split(" ")[1]).getHost();
int type = hash(host.toCharArray());
// writer(type+"", line);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
line = reader.readLine();
line_num++;
if(line_num%100==0){
// System.out.println(line_num);
char [] cc = line.toCharArray();
for(char c: cc){
if(isCnorEn(c)){
System.out.println(line);
break;
}
}
// break;
}
}
reader.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
/**
* 判断是中文还是英文字符
*/
static boolean isCnorEn(char c) {
if ((c >= 0x0391 && c <= 0xFFE5) // 中文字符
|| (c >= 0x0000 && c <= 0x00FF)) // 英文字符
return true;
return false;
// if ((c >= 0x0391 && c <= 0xFFE5) // 英文字符
// ) //
// return true;
// return false;
}
/**
* 给定一个字符串,返回hash后的int值
* @param word
* @return
*/
public static int hash(char[] word) {
int index = 0;
int i=0;
while(i<word.length) {
index += index * 31 + word[i];
i++;
}
return Math.abs(index % HASHLEN);
}
/**
* 将line写入filename中(文件不存在则先建立)
* @param filename
* @param line
*/
public static void writer(String filename, String line){
String path = file_dir+filename+".txt";
try {
File file = new File(path);
if(!file.isFile()){
file.createNewFile();
}
String filecode = judgeFileCode(src_file);
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(path, true), "GBK");
// BufferedWriter writer = new BufferedWriter(new FileWriter(path, true));
if(null != line){
writer.write(line+"\r\n");
}
writer.close(); } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} public static String judgeFileCode(String path){
try {
File file = new File(path);
InputStream in= new java.io.FileInputStream(file);
byte[] b = new byte[3];
in.read(b);
in.close();
if (b[0] == -17 && b[1] == -69 && b[2] == -65) {
// System.out.println(file.getName() + ":编码为UTF-8");
return "UTF-8";
}
else{
// System.out.println(file.getName() + ":可能是GBK,也可能是其他编码");
return "GBK";
}
} catch (Exception e) {
// TODO: handle exception
}
return null;
} /**
* 判断文件的编码格式
* @param fileName :file
* @return 文件编码格式
* @throws Exception
*/
public static String codeString(String fileName) throws Exception{
BufferedInputStream bin = new BufferedInputStream(new FileInputStream(fileName));
int p = (bin.read() << 8) + bin.read();
String code = null;
//其中的 0xefbb、0xfffe、0xfeff、0x5c75这些都是这个文件的前面两个字节的16进制数
switch (p) {
case 0xefbb:
code = "UTF-8";
break;
case 0xfffe:
code = "Unicode";
break;
case 0xfeff:
code = "UTF-16BE";
break;
case 0x5c75:
code = "ANSI|ASCII" ;
break ;
default:
code = "GBK";
} return code;
} }
使用hash拆分文件的更多相关文章
- Linux split拆分文件
200 ? "200px" : this.width)!important;} --> 介绍 split可以将一个大文件拆分成指定大小的多个文件,并且拆分速度非常的快,拆分一 ...
- linux_shell_拆分文件_多进程脚本
[需求场景]:一个10000w行的文件处理 ,多进程处理 比如启动100个进程同时处理. [方法]:拆分文件(split) ,制作shell脚本 执行后台进程 [demo]: 假设处理程序为 ...
- linux 拆分文件
split [OPTION]... [INPUT [PREFIX]] :根据行或者大小拆分文件 split file_name :默认把文件file_name拆分成xaa,xab,xac,...... ...
- linux拆分文件
1.先看下文件总的行数: wc -l filename 我们现在来看看它具体的参数该怎么用: split支持自定义输出文件大小和输出文件行数两种模式,此外还可以定义每一行最大的值. -l 按输出文件行 ...
- split - 拆分文件
拆分文件 # 每个文件的行数为1000行 split -l 1000 test.txt # 将test文件拆分,20M一个文件 split -b 20M test.txt test文件拆分,并且文件名 ...
- casperjs在拆分文件后的中文乱码问题的解决
windows环境. capserjs的中文乱码使用phantom.outputEncoding="GBK";即可解决. 但当我们脚本很大,需要拆分时(参考http://docs. ...
- java 按内容拆分文件
文件内容为: BC************* **************** *************** BC************* **************** *********** ...
- python_基础学习_02_拆分文件(spilt)
做爬虫经常会有这样的引用场景 ,原始网页存储格式为 url+\t+ html php 有个explode的 拆分文本行方法,比较方便直接接收列值 list($url,$html)=explode(& ...
- RandomAccessFile拆分合并文件
import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java. ...
随机推荐
- Mac下安装svn服务器
本文转载自http://www.cnblogs.com/czq1989/p/4913692.html Mac默认已经安装了svn,我们只需要进行配置并开启就可以了 首先我们可以验证一下是否安装了svn ...
- 牛客练习赛46 C 华华跟奕奕玩游戏 (期望,概率)(详解)
链接:https://ac.nowcoder.com/acm/contest/894/C 来源:牛客网 华华跟奕奕玩游戏 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...
- Flow-based model
文章1: NICE: NON-LINEAR INDEPENDENT COMPONENTS ESTIMATION 文章2:Real-valued Non-Volume Preserving (Real ...
- magento获取当前栏目ID号与栏目名称函数
Magento获取当前栏目ID:$_cat= new Mage_Catalog_Block_Navigation();$curent_cat= $_cat->getCurrentCategory ...
- Android图像处理之图形特效处理
一.Android变形矩阵——Matricx: 跟Android图像的色彩处理基本一样,只是将ColorMatrix换成了Matrix,ColorMatrix是4*5的矩阵,Matrix是3*3的.每 ...
- 19.8.12 记录Scaffold(脚手架)的常见属性及使用
Scaffold 有利于我们快速的构建页面,使用也是十分的方便. 下面记录一下其简单的使用方法 Scaffold( appBar: AppBar( title: Text('课程'), ), bo ...
- gson转换问题
list集合中integer问题 List<Integer> lists= gson.fromJson(params.get("lists"), new TypeTok ...
- 部署安装snort--入侵检测工具
1:部署安装snort yum -y install wget 2: 基本依赖环境 yum -y install gcc flex bison zlib zlib-devel libpcap libp ...
- Visual Studio右侧缩略图
打开Visual Studio→工具→选项 点击确定,完成!Enjoy!
- shiro之缓存
1 细说shiro之七:缓存:https://www.cnblogs.com/nuccch/p/8044226.html 2 Shiro缓存使用Redis.Ehcache.自带的MpCache实现的三 ...