在 csv 文件中的现有数据下方追加数据 Java
Appending data below the existing data in csv file Java
我有一个包含 14 列和 5 行的 csv 文件。我正在阅读最后一列的内容,并对列值执行一些数学运算并将其保存在名为 exposureFactor[]
的数组中。现在,我必须在第一列下方明智地编写该数组列,跳过完美完成的行。但是当我再次 运行 程序时,它给了我这个错误。
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
at java.base/java.lang.Integer.parseInt(Integer.java:662)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at java.base/java.util.stream.ReferencePipeline.accept(ReferencePipeline.java:212)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:550)
at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
at java.base/java.util.stream.IntPipeline.toArray(IntPipeline.java:538)
at com.sajood.Readingcsv.appendCol.main(appendCol.java:28)
有人可以强调这个问题吗?这是给我的一个项目,截止日期是 2 天。
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import au.com.bytecode.opencsv.CSVReader;
public class appendCol {
public static void main(String[] args) throws IOException {
int sum = 0;
String[] data5;
CSVReader reader5 = new CSVReader(new FileReader("D:\new.csv"));
String[] nextLine5;
List<String> li = new ArrayList<String>();
while (null != (nextLine5 = reader5.readNext())) {
li.add(nextLine5[nextLine5.length - 1]);
}
String[] tempe = li.toArray(new String[0]);
String[] exp = Arrays.copyOfRange(tempe, 1, tempe.length);
data5 = Arrays.toString(exp).replace("[", "").replace("]", "").replace("\"", "").replace(" ", "").split(",");
int[] weightage = Arrays.stream(data5).mapToInt(Integer::parseInt).toArray();
for (int i = 0; i < weightage.length; i++) {
sum += weightage[i];
}
int average = sum / 6;
String averageStr = String.valueOf(average);
String exposureFactor[] = { "Exposure Factor", averageStr };
FileWriter writer4 = new FileWriter("D:\new.csv", true);
CSVReader reader3 = new CSVReader(new FileReader("D:\new.csv"), '\t', '\'', 6);
if ((reader3.readNext()) != null) {
return;
} else {
for (int j = 0; j < exposureFactor.length; j++) {
if (j == 0) {
writer4.append("\n");
}
writer4.append(String.valueOf(exposureFactor[j]));
writer4.append("\n");
}
writer4.close();
}
}
}
唯一可能的行是:
int[] weightage = Arrays.stream(data5).mapToInt(Integer::parseInt).toArray();
我假设它正在尝试将您的空行解析为数字。为什么在输出曝光系数后还需要运行它?
如果你的老板真的需要 运行 它连续两次,快速解决方法是添加一个 try catch 并让它“优雅地”退出。
try {
int[] weightage = Arrays.stream(data5).mapToInt(Integer::parseInt).toArray();
} catch (NumberFormatException e) {
System.out.println("Program has already been run.");
System.exit(0);
}
你也可以使用那个if ((reader3.readNext()) != null)
检查你是否想重新做一些事情。
还有一件事:您可能希望 average
成为 double
而不是 int
。
我有一个包含 14 列和 5 行的 csv 文件。我正在阅读最后一列的内容,并对列值执行一些数学运算并将其保存在名为 exposureFactor[]
的数组中。现在,我必须在第一列下方明智地编写该数组列,跳过完美完成的行。但是当我再次 运行 程序时,它给了我这个错误。
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
at java.base/java.lang.Integer.parseInt(Integer.java:662)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at java.base/java.util.stream.ReferencePipeline.accept(ReferencePipeline.java:212)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:550)
at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
at java.base/java.util.stream.IntPipeline.toArray(IntPipeline.java:538)
at com.sajood.Readingcsv.appendCol.main(appendCol.java:28)
有人可以强调这个问题吗?这是给我的一个项目,截止日期是 2 天。
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import au.com.bytecode.opencsv.CSVReader;
public class appendCol {
public static void main(String[] args) throws IOException {
int sum = 0;
String[] data5;
CSVReader reader5 = new CSVReader(new FileReader("D:\new.csv"));
String[] nextLine5;
List<String> li = new ArrayList<String>();
while (null != (nextLine5 = reader5.readNext())) {
li.add(nextLine5[nextLine5.length - 1]);
}
String[] tempe = li.toArray(new String[0]);
String[] exp = Arrays.copyOfRange(tempe, 1, tempe.length);
data5 = Arrays.toString(exp).replace("[", "").replace("]", "").replace("\"", "").replace(" ", "").split(",");
int[] weightage = Arrays.stream(data5).mapToInt(Integer::parseInt).toArray();
for (int i = 0; i < weightage.length; i++) {
sum += weightage[i];
}
int average = sum / 6;
String averageStr = String.valueOf(average);
String exposureFactor[] = { "Exposure Factor", averageStr };
FileWriter writer4 = new FileWriter("D:\new.csv", true);
CSVReader reader3 = new CSVReader(new FileReader("D:\new.csv"), '\t', '\'', 6);
if ((reader3.readNext()) != null) {
return;
} else {
for (int j = 0; j < exposureFactor.length; j++) {
if (j == 0) {
writer4.append("\n");
}
writer4.append(String.valueOf(exposureFactor[j]));
writer4.append("\n");
}
writer4.close();
}
}
}
唯一可能的行是:
int[] weightage = Arrays.stream(data5).mapToInt(Integer::parseInt).toArray();
我假设它正在尝试将您的空行解析为数字。为什么在输出曝光系数后还需要运行它?
如果你的老板真的需要 运行 它连续两次,快速解决方法是添加一个 try catch 并让它“优雅地”退出。
try {
int[] weightage = Arrays.stream(data5).mapToInt(Integer::parseInt).toArray();
} catch (NumberFormatException e) {
System.out.println("Program has already been run.");
System.exit(0);
}
你也可以使用那个if ((reader3.readNext()) != null)
检查你是否想重新做一些事情。
还有一件事:您可能希望 average
成为 double
而不是 int
。