使用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. ...
随机推荐
- laravel 使用 intervention/image 的注意方法
出错NotSupportedException in AbstractEncoder.php line 151: Encodingformat (tmp) is not supported. 这个只是 ...
- 11、Nginx反向代理服务
1Nginx代理服务基本概述 1.代理一词并不陌生, 该服务我们常常用到如(代理理财.代理租房.代理收货等等),如下图所示 2.在没有代理模式的情况下,客户端和Nginx服务端,都是客户端直接请求服务 ...
- python、第一篇:初识数据库
一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...
- 一般情况下的NB-IoT网络架构
一. NB总体网络架构 NB-IoT端到端系统架构如下图所示: 终端:UE(User Equipment),通过空口连接到基站(eNodeB(evolved Node B , E-UTRAN 基站)) ...
- php自定义json_encode()和json_decode()函数
json数据大家应该遇到过,json_encode()和json_decode()是php5.0以后加上的内置函数,如果低版本要使用,需加扩展,很多时候我们无权改变服务器的配置,我们只能通过自定义函数 ...
- 【BZOJ3196】【Luogu P3380】 【模板】二逼平衡树(树套树)
做数据结构一定要平\((fo)\)心\((de)\)静\((yi)\)气\((pi)\)...不然会四处出锅的\(QAQ\) 写法:线段树套平衡树,\(O(Nlog^3N)\).五个操作如果是对于整个 ...
- 原型模式故事链(5)--JS变量作用域、作用域链、闭包
上一章 JS执行上下文.变量提升.函数声明 传送门:https://segmentfault.com/a/11... 本次我们主要讲讲变量作用域和闭包变量作用域:顾名思义:变量起作用的范围.变量分为全 ...
- 记一次生产环境nginx图片上传不了的问题
在server节点目录下配置: client_max_body_size 8M; client_body_buffer_size 8M; 不过还是不能上传就执行下面这条命令: cd /var/lib/ ...
- qt5---布局
QHBoxLayout 水平布局: Header: #include <QHBoxLayout> qmake: QT += widgets Inherits:QBoxLayout ...
- 【leetcode】1247. Minimum Swaps to Make Strings Equal
题目如下: You are given two strings s1 and s2 of equal length consisting of letters "x" and &q ...