读取大文件时Eclipse不起作用-Java
我需要一些帮助,因为我累坏了。 我刚刚用Java编写了一个程序,它逐行读取一个文件,进行一些计算并打印结果。例如,如果我的csv文件中有60行,它将打印60000个结果。问题是,当我有100行时,它工作正常,当我有1000行时,程序在这种情况下将打印100000个值,它只返回100000个零。 有什么问题吗读取大文件时Eclipse不起作用-Java,java,eclipse,Java,Eclipse,我需要一些帮助,因为我累坏了。 我刚刚用Java编写了一个程序,它逐行读取一个文件,进行一些计算并打印结果。例如,如果我的csv文件中有60行,它将打印60000个结果。问题是,当我有100行时,它工作正常,当我有1000行时,程序在这种情况下将打印100000个值,它只返回100000个零。 有什么问题吗 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
public class WillemainApp {
static String delimiter = ",";
public static void main(String args[]) throws IOException {
BufferedReader br = null;
try {
String sCurrentLine;
// read the file and store each line in an object
br = new BufferedReader(new FileReader("C:\\Book2.csv"));
int [] Demand = new int[36];
int [] LeadTime = new int[1000];
List<Materials> materials = new ArrayList<Materials>();
List<LeadTimeDemand> lead = new ArrayList<LeadTimeDemand>();
while ((sCurrentLine = br.readLine()) != null) {
String [] fields = sCurrentLine.split(delimiter);
for (int i = 0; i < fields.length; i++) {
Demand[i] = Integer.parseInt(fields[i]);
if (Demand[i] < 0) {
Demand[i] = 0;
}
}
materials.add(new Materials(Demand));
}
for (Materials m :materials) {
for(int f = 0; f < LeadTime.length; f++) {
LeadTime[f] = 0;
}
// some preperations in order to define some parameters of the problem
double ZeroToZero = 0;
double ZeroToNonZero = 0;
double NonZeroToZero = 0;
double NonZeroToNonZero = 0;
int [] materialdemand = m.getDemand();
int countzero = 0;
for (int v =0; v < materialdemand.length; v++) {
if (materialdemand[v] >0) {
countzero++;
}
}
int NonZeroValues[] = new int [countzero];
int q = 0;
for(int e = 0; e < materialdemand.length; e++) {
if (materialdemand[e] != 0) {
NonZeroValues[q] = materialdemand[e];
q++;
}
}
int [] forecastsequence = new int [materialdemand.length];
for(int j = 0; j < materialdemand.length - 1; j++) {
if ((materialdemand[j] == 0) && (materialdemand[j + 1] == 0)) {
ZeroToZero = ZeroToZero + 1;
}
if ((materialdemand[j] == 0) && (materialdemand[j + 1] != 0)) {
ZeroToNonZero = ZeroToNonZero + 1 ;
}
if ((materialdemand[j] != 0) && (materialdemand[j + 1] == 0)) {
NonZeroToZero = NonZeroToZero + 1;
}
if ((materialdemand[j] != 0) && (materialdemand[j + 1] != 0)) {
NonZeroToNonZero = NonZeroToNonZero + 1;
}
}
double ZeroToZeroInterval = (ZeroToZero / (ZeroToZero + ZeroToNonZero)) * 100;
double ZeroToNonZeroInterval = (ZeroToNonZero / (ZeroToZero + ZeroToNonZero)) * 100;
double NonZeroToZeroInterval = (NonZeroToZero / (NonZeroToZero + NonZeroToNonZero)) * 100;
double NonZeroToNonZeroInterval = (NonZeroToNonZero / (NonZeroToZero + NonZeroToNonZero)) * 100;
if (ZeroToZeroInterval == ZeroToNonZeroInterval) {
ZeroToZeroInterval = ZeroToZeroInterval - 0.1;
}
if (NonZeroToZeroInterval == NonZeroToNonZeroInterval) {
NonZeroToZeroInterval = NonZeroToZeroInterval - 0.1;
}
double min = 0;
int kal = 0;
if (ZeroToZeroInterval < ZeroToNonZeroInterval) {
min = ZeroToZeroInterval;
} else {
min = ZeroToNonZeroInterval;
}
double min2 = 0;
if (NonZeroToZeroInterval < NonZeroToNonZeroInterval) {
min2 = NonZeroToZeroInterval;
} else {
min2 = NonZeroToNonZeroInterval;
}
while (kal <1000) {
forecastsequence[0] = materialdemand[0];
for (int w = 1; w < forecastsequence.length; w++) {
forecastsequence[w] = 0;
}
for (int z = 0; z < materialdemand.length - 1; z++) {
Random rn = new Random();
int random = rn.nextInt(101);
if (materialdemand[z] == 0) {
if ((random > min) && (min == ZeroToZeroInterval)) {
forecastsequence[z + 1] = NonZeroValues[rn.nextInt(NonZeroValues.length)];
}
if ((random > min) && (min == ZeroToNonZeroInterval)) {
forecastsequence[z + 1] = 0;
}
if ((random < min) && (min == ZeroToZeroInterval)) {
forecastsequence[z + 1] = 0;
}
if ((random < min) && (min == ZeroToNonZeroInterval)) {
forecastsequence[z + 1] = NonZeroValues[rn.nextInt(NonZeroValues.length)];
}
}
if (materialdemand[z] != 0) {
if ((random < min2) && (min2 == NonZeroToZeroInterval)) {
forecastsequence[z + 1] = 0;
}
if ((random < min2) && (min2 == NonZeroToNonZeroInterval)) {
forecastsequence[z + 1] = NonZeroValues[rn.nextInt(NonZeroValues.length)];
}
if ((random > min2) && (min2 == NonZeroToZeroInterval)) {
forecastsequence[z + 1] = NonZeroValues[rn.nextInt(NonZeroValues.length)];
}
if ((random >min2) && (min2 == NonZeroToNonZeroInterval)) {
forecastsequence[z + 1] = 0;
}
}
}
for (int p = 0; p < forecastsequence.length; p++) {
if (forecastsequence[p] != 0) {
int JITTERED = (int) (1 + forecastsequence[p] + 0.5 * Math.sqrt(forecastsequence[p]));
forecastsequence[p] = JITTERED;
}
}
int [] LeadTimeDemand = new int [forecastsequence.length - 1];
for (int ram = 0; ram < LeadTimeDemand.length; ram++) {
LeadTimeDemand[ram] = 0;
}
int sum = 0;
for (int d = 0; d < LeadTimeDemand.length;d++) {
LeadTimeDemand[d] = forecastsequence[d] + forecastsequence[d+1];
sum = sum + LeadTimeDemand[d];
}
LeadTime[kal] = sum;
kal++;
System.out.println(sum);
}
}
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
看看这个文件的编码! 在BBEdit或TextWrangler*中打开文件。 将文件设置为Unicode UTF-16 Little Endian行结尾可以是Unix或Windows。拯救 在Excel中:数据>获取外部数据>导入文本文件
问题的根源可能是编码错误。您的代码一定有问题。您能发布文件的一个片段吗?为什么要使用eclipse查看CSV?代码没有问题。那是肯定的。当我有一个大文件时,它不起作用。编辑问题并发布你的代码和文件片段。如果代码没有问题,那么你在错误的网站上。也许试试。