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拆分文件的更多相关文章

  1. Linux split拆分文件

    200 ? "200px" : this.width)!important;} --> 介绍 split可以将一个大文件拆分成指定大小的多个文件,并且拆分速度非常的快,拆分一 ...

  2. linux_shell_拆分文件_多进程脚本

    [需求场景]:一个10000w行的文件处理  ,多进程处理  比如启动100个进程同时处理. [方法]:拆分文件(split) ,制作shell脚本  执行后台进程 [demo]: 假设处理程序为   ...

  3. linux 拆分文件

    split [OPTION]... [INPUT [PREFIX]] :根据行或者大小拆分文件 split file_name :默认把文件file_name拆分成xaa,xab,xac,...... ...

  4. linux拆分文件

    1.先看下文件总的行数: wc -l filename 我们现在来看看它具体的参数该怎么用: split支持自定义输出文件大小和输出文件行数两种模式,此外还可以定义每一行最大的值. -l 按输出文件行 ...

  5. split - 拆分文件

    拆分文件 # 每个文件的行数为1000行 split -l 1000 test.txt # 将test文件拆分,20M一个文件 split -b 20M test.txt test文件拆分,并且文件名 ...

  6. casperjs在拆分文件后的中文乱码问题的解决

    windows环境. capserjs的中文乱码使用phantom.outputEncoding="GBK";即可解决. 但当我们脚本很大,需要拆分时(参考http://docs. ...

  7. java 按内容拆分文件

    文件内容为: BC************* **************** *************** BC************* **************** *********** ...

  8. python_基础学习_02_拆分文件(spilt)

    做爬虫经常会有这样的引用场景 ,原始网页存储格式为  url+\t+ html php 有个explode的 拆分文本行方法,比较方便直接接收列值 list($url,$html)=explode(& ...

  9. RandomAccessFile拆分合并文件

    import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java. ...

随机推荐

  1. docker 网络 实现

    最近在学习docker网络相关的知识,关于网络这块儿记下来,以便review dokcer安装完成之后默认提供三种网络  bridge host none  docker默认使用bridge brid ...

  2. Clob类型转换为String

    SQL CLOB 是内置类型,它将字符大对象存储为数据库表某一行中的一个列值,使用CHAR来存储数据,如XML文档. 如下是一个Clob转换为String的静态方法,可将其放在自己常用的工具类中,想直 ...

  3. pathlib:处理文件路径的瑞士军刀

    pathlib是python3.4中引入的模块,专门用来处理路径的.个人觉得这是一个非常非常强大的模块,可以说是处理路径的一把瑞士军刀,下面我们就来看看它的功能. 在pathlib中有一个Path这个 ...

  4. 001-CentOS 7系统搭建Rsyslog+LogAnalyzer解决交换机日志收

    日志功能对于操作系统是相当重要的,在使用中,无论是系统还是应用等等,出了任何问题,我们首先想到的便是分析日志,查找问题原因.自 CentOS 7 开始,我们的 CentOS 便开始使用 rsyslog ...

  5. 06-spring框架—— Spring 与Web

    在 Web 项目中使用 Spring 框架,首先要解决在 web 层(这里指 Servlet)中获取到 Spring容器的问题.只要在 web 层获取到了 Spring 容器,便可从容器中获取到 Se ...

  6. JavaScript 复制变量的三种方法

    参考:Copying Objects in JavaScript - Orinami Olatunji(@orinamio_) October 23, 2017    直接将一个变量赋给另一个变量时, ...

  7. Django学习系列14:第一个数据库迁移

    在Django中,ORM的任务是模型化数据库. 创建数据库其实是由另一个系统负责的叫做迁移. 迁移的任务是根据你对models.py文件的改动情况,添加或删除表和列. 可以把迁移想象成数据库使用的版本 ...

  8. Android图像处理之图形特效处理

    一.Android变形矩阵——Matricx: 跟Android图像的色彩处理基本一样,只是将ColorMatrix换成了Matrix,ColorMatrix是4*5的矩阵,Matrix是3*3的.每 ...

  9. 京东POP店铺使用京东物流切仓操作方法

    首先进入京东物流工作台:https://wl.jdwl.com/ 在运营管理中,点击店铺商品 然后看截图操作

  10. Phaserjs V2的state状态解析及技巧

    用phaserjs开发了好多游戏了,但是对phaser还是了解不深,只知道怎么去用,今天就特意花点时间研究下phaser的状态管理到底是怎么回事. 首先,new Phaser.Game,以下是Phas ...