前提:
* 文件排序
* 文件中每行保存一个数字
* 数字没有重复的
* 没有其他相关的信息与数字想关联
* 大概只有1M的内存空间可以使用
代码
package com.wutianyi.interesting;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
/**
* @author hanjie.wuhj
* 文件排序
* 文件中每行保存一个数字
* 数字没有重复的
* 没有其他相关的信息与数字想关联
* 大概只有1M的内存空间可以使用
*/
public class FileSort {
/**
* 1MB的内存
*/
byte[] results = new byte[1024 * 1024];
byte[] values = new byte[] { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, -128 };
void createSortFile(String file) {
PrintWriter pw = null;
try {
pw = new PrintWriter(new File(file));
int value = 1024 * 1024 * 8 - 1;
for (int i = value; i >= 0; i--) {
pw.println(i);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (null != pw) {
pw.close();
}
}
}
void sortFile(String file) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(
new FileInputStream(file)));
String line = reader.readLine();
while (null != line && !line.isEmpty()) {
int v = Integer.parseInt(line);
dealValue(v);
line = reader.readLine();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != reader) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
void dealValue(int v) {
int index = v / 8;
int position = v % 8;
results[index] = (byte) (results[index] | values[position]);
}
void printValue(String out) {
PrintWriter pw = null;
try {
pw = new PrintWriter(new File(out));
int i = 0;
int index = 1;
for (byte result : results) {
for (int j = 0; j < 8; j++) {
if ((result & values[j]) == values[j]) {
pw.println(i + j);
}
}
i = index * 8;
++index;
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (null != pw) {
pw.flush();
pw.close();
}
}
}
public static void main(String[] args) {
FileSort sort = new FileSort();
// sort.createSortFile("sort=original.txt");
long start = System.currentTimeMillis();
sort.sortFile("sort=original.txt");
long end_1 = System.currentTimeMillis();
System.out.println("sort time: " + (end_1 - start));
sort.printValue("sort-result.txt");
long end_2 = System.currentTimeMillis();
System.out.println("writer file time: " + (end_2 - end_1));
}
}
分享到:
相关推荐
唱戏机文件排序小工具是一款实用的软件,主要针对MP3、MP4等多媒体文件进行高效有序的管理。它能够帮助用户轻松整理唱戏机中的各类音频和视频文件,使得在设备上查找和播放文件更加方便。对于经常使用唱戏机或者拥有...
"p3p4播放器文件排序"这个主题聚焦于如何管理个人的媒体库,特别是针对那些低成本或功能相对简单的播放器设备。下面将详细讨论这个话题。 首先,文件排序在多媒体管理中至关重要,因为它能让用户更有效地找到并播放...
根据提供的文件信息,本文将对“fso文件排序演示(fso)”进行详细的解析与扩展,主要涉及以下几个方面:脚本的背景介绍、关键代码解读、功能实现原理以及应用场景。 ### 脚本背景 该脚本是使用VBScript编写的ASP...
问题描述 操作系统中在查找文件时会按照某个规则对文件排序,例如下图为按照文件修改日期逆序排 序(最后修改的排在最前面)。 但目前操作系统不支持同时按照多个字段进行排序。现在请你写一个程序能够同时按照修改 ...
"拖拽式文件排序改名工具"就是一种为了提升效率而设计的实用软件,它允许用户通过简单直观的拖放操作来对文件进行排序和重命名,极大地简化了传统手动操作的繁琐过程。以下是对这个工具及其相关知识点的详细解释: ...
在"多进程内存映射文件排序"这一主题中,我们将深入探讨如何利用这一技术来实现高效的大规模数据排序。 首先,让我们了解什么是内存映射文件。内存映射文件(Memory-Mapped File)是操作系统提供的一种机制,它将...
给家人买了唱戏机后,发现排序很纠结,网上找了很久未果。 用Java实现了音乐、视频文件排序程序,支持多个目录,带点歌计数器 用法: java MusicFileOrderListFinal 目录1 目录2 目录3
在IT领域,多线程文本文件排序是一项常见的性能优化技术,尤其在大数据处理和系统设计中扮演着重要角色。本文将深入探讨这个主题,并结合提供的链接资源,分享关于多线程排序的一些关键知识点。 首先,多线程是并发...
在C++编程中,对文件中的数据进行排序并...总之,本项目展示了C++处理文件排序和CSV文件的基本技术,结合了文件I/O、排序算法和自定义比较函数等核心概念。理解并掌握这些知识点对于任何C++开发者来说都是至关重要的。
这个客户端在官方网站的基础功能上,进一步提升了用户体验,加入了目录显示、托盘上传、URL上传以及文件排序等实用功能。这些功能的增加,使得七牛存储文件管理客户端成为开发者和企业进行云端文件管理的得力工具。 ...
值得看一看,实现大文件排序。有助理解外排序等等
给家人买了唱戏机后,发现排序很纠结,网上找了很久未果。 用Java实现了音乐、视频文件排序程序,支持多个目录,带点歌计数器 用法: java MusicFileOrderListFinal 目录1 目录2 目录3
用于超大文件的快速排序,相比比谁的速度更快,占用内存更少,该排序文件经得起你的考验,目前设计的处理能力为40亿行文本的排序。最近更新加入了去重操作。
标题中的“mp3,mp4,txt文件排序,所有文件都可以排序”指的是一个软件功能,它允许用户对不同类型的文件,如音乐文件(mp3)、视频文件(mp4)和文本文件(txt)进行排序。在日常使用中,尤其是在移动设备上,文件...
将此m文件放在需要排序的文件一起,即可按现在的顺序重新命名1 2 3 4.。。文件类型需要改成符合自己的
标题"文件排序DELPHI源码"提示我们,这个压缩包可能包含的是使用Delphi编写的用于对文件进行排序的源代码。接下来,我们将深入探讨Delphi编程中的文件排序相关知识点。 1. **文件操作**:在Delphi中,文件操作是...
在Windows操作系统中,文件排序规则通常依据文件的名称、扩展名以及创建或修改日期等因素进行。在Java编程环境中,我们也可以模拟实现这种排序规则。Java提供了丰富的类库和方法来处理文件操作,包括对文件的排序。...
本话题聚焦于如何读取Plist文件,对其中的数据进行排序,然后将排序后的数据保存为一个新的词典,并存储到应用的Document目录下。以下是一系列详细步骤和相关知识点: 1. **Plist文件的读取**: 首先,你需要使用`...
问题描述:操作系统中在查找文件时会按照某个规则对文件排序,例如下图为按照文件修改日期逆序排 序(最后修改的排在最前面)。 但目前操作系统不支持同时按照多个字段进行排序。现在请你写一个程序能够同时按照修改...