从文件中读取N多数字,找到最大的5个数字
2017-04-13 00:30
134 查看
package cpm.it.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
/**
* 需求:
* <p>读取一个文件,一次读取一个数字,有N多个数字,数组放不下;要求找到5个最大的数字,所以不能想着把所有数字读取出来再放入数组中做比较,
* 只能一个一个拿出来做比较;</p>
* 我的思路:
* <p>先拿出前5个数字,并放入长度为5的数组,然后排序,让最小的数字和以后从文件中读取出来的数字做比较,
* 只要大于数组中最小的,就把读取出来的数字替换到数组里,这样及可以得到最终的最大的5个数字</p>
*
* <p>模拟输出输入的数字:</p>
* @author King
*
*/
public class Test1 {
public static void main(String[] args) {
readWord("F:/3.txt");
}
/**
* 获取输出流
*
* @param namepath
* @return
*/
public static OutputStream getOutStream(String namepath) {
try {
return new FileOutputStream(new File(namepath));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* 写入
*
* @param namepath
* @return
*/
public static void writeWord(String namepath) {
OutputStream out = getOutStream(namepath);
try {
java.util.Random r = new java.util.Random();//此处没有用随机数
//写入文件,模拟N多数字的环境
for (int i = 1; i < 15; i++) {
//System.out.println("radom=" + r.nextInt(10));
System.out.println("i=" + i);
out.write(i);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取输入流
*
* @param namepath
* @return
*/
public static InputStream getInStream(String namepath) {
try {
return new FileInputStream(new File(namepath));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* 读取
*
* @param namepath
* @return
*/
public static void readWord(String namepath) {
int[] s1 = new int[5] ;//用于存放5个数字的数组
writeWord(namepath);//模拟环境,写入N多数字
InputStream in = getInStream(namepath);//读取数字
try {
/**
* 要从这个文件读取很多数字,不知道多少,所以不能存入数组 最后要找到最大的5个
*/
int b = 0;//用于接收读取出来的数字
int i = 0;//用于循环自增; 在此我们暂时不考虑long型数据
while ((b = in.read()) != -1) {
//把前5个数字存入数组中
if (i < 5) {
s1[i] = b;
}
//用后面的数字和前面的5个做比较
if (i >= 5) {
Arrays.sort(s1) ; //做比较之前先进行升序操作
if (b > s1[0]) { //和数组中最小的数字作比较
s1[0] = b; //最关键的一步:大于数组中最小的及把他替换掉
}
}
i++;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (int i = 0; i < s1.length; i++) {
System.out.println("s1["+i+"]="+s1[i]);
}
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
/**
* 需求:
* <p>读取一个文件,一次读取一个数字,有N多个数字,数组放不下;要求找到5个最大的数字,所以不能想着把所有数字读取出来再放入数组中做比较,
* 只能一个一个拿出来做比较;</p>
* 我的思路:
* <p>先拿出前5个数字,并放入长度为5的数组,然后排序,让最小的数字和以后从文件中读取出来的数字做比较,
* 只要大于数组中最小的,就把读取出来的数字替换到数组里,这样及可以得到最终的最大的5个数字</p>
*
* <p>模拟输出输入的数字:</p>
* @author King
*
*/
public class Test1 {
public static void main(String[] args) {
readWord("F:/3.txt");
}
/**
* 获取输出流
*
* @param namepath
* @return
*/
public static OutputStream getOutStream(String namepath) {
try {
return new FileOutputStream(new File(namepath));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* 写入
*
* @param namepath
* @return
*/
public static void writeWord(String namepath) {
OutputStream out = getOutStream(namepath);
try {
java.util.Random r = new java.util.Random();//此处没有用随机数
//写入文件,模拟N多数字的环境
for (int i = 1; i < 15; i++) {
//System.out.println("radom=" + r.nextInt(10));
System.out.println("i=" + i);
out.write(i);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取输入流
*
* @param namepath
* @return
*/
public static InputStream getInStream(String namepath) {
try {
return new FileInputStream(new File(namepath));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* 读取
*
* @param namepath
* @return
*/
public static void readWord(String namepath) {
int[] s1 = new int[5] ;//用于存放5个数字的数组
writeWord(namepath);//模拟环境,写入N多数字
InputStream in = getInStream(namepath);//读取数字
try {
/**
* 要从这个文件读取很多数字,不知道多少,所以不能存入数组 最后要找到最大的5个
*/
int b = 0;//用于接收读取出来的数字
int i = 0;//用于循环自增; 在此我们暂时不考虑long型数据
while ((b = in.read()) != -1) {
//把前5个数字存入数组中
if (i < 5) {
s1[i] = b;
}
//用后面的数字和前面的5个做比较
if (i >= 5) {
Arrays.sort(s1) ; //做比较之前先进行升序操作
if (b > s1[0]) { //和数组中最小的数字作比较
s1[0] = b; //最关键的一步:大于数组中最小的及把他替换掉
}
}
i++;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (int i = 0; i < s1.length; i++) {
System.out.println("s1["+i+"]="+s1[i]);
}
}
}
相关文章推荐
- 【数字图像处理】C++读取、旋转和保存bmp图像文件编程实现
- 花一天时间搜索,居然找到一个德国人写的论文里面有用Matlab读取*.spa文件的程序片段
- 在存有10亿个数的文件中找到最大的100万个数
- c实现“读取文件中的数字并求和”
- c中从一个文件中读取一行(最大32个字节)标准写法
- asp中用msxml的xmlhttp读取网页源文件提示系统未找到指定的资源与防火墙
- [android] 从 SDcard 中进行文件的读取操作,含中文和数字
- 【数字图像处理】C++读取、旋转和保存bmp图像文件编程实现(转载)
- 找出这个1000位数字中连续5个数字乘积的最大值。
- 从屏幕读取字符串,并提取其中数字串,再次打印到屏幕或写入一个文件
- Exe 9 统计文件中的整型数字的平均值(去掉一个最大和最小值)
- 读取EXCEL文件数字类型字段为空的问题
- 今天大家做的一个比赛题:有6个文件,每个文件里大约200w整数,每行一个找出所有文件里最大的一个数字
- 从文件夹中读取子文件夹内带有指定后缀如.bmp文件的C++实现,并读取子文件夹后缀数字
- 系统是如何根据我们给的路径而找到并读取文件的呢?
- 从txt文件中读取数字 java
- 【数字图像处理】C++读取、旋转和保存bmp图像文件编程实现
- 请教Ado.Net按文本读取CSV/Txt文件时,如何禁止将内容转换成数字
- 欧拉计划之题目8:找出这个1000位数字中连续5个数字乘积的最大值
- linux下如何查看文件大小 快速找到最大文件的方法