传递字符串数组的Java
我对Java很新,我正在做一些练习。我只是简单地处理简单的IO东西,从文件读取然后打印到输出。我也玩过从输入中删除逗号,并让这部分工作。我的问题是当我尝试将数组中的值打印到新文件中时。是否我的数组是在BufferedReader的while循环内创建的?如何获取数组values
中的值可以被BufferedWriter看到?我也很好奇,在打印到输出文件时如何去颠倒数组的顺序?感谢任何帮助的人,我已经搜索,但没有能够遇到任何具体的事情。传递字符串数组的Java
代码:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.io.FileWriter;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new FileReader("myImport.txt"));
String line = null;
while ((line = br.readLine()) != null) {
String[] values = line.split(",");
System.out.println("Your file has been evaluated, here are the contents:");
for (String str : values) {
System.out.println(str);
}
}
br.close();
try {
File file = new File("myOutput.txt");
// if file doesnt exists, then create it
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(values);
for (int i = 0; i < values.length; i++) {
fw.write(values[i] + "\n");
}
bw.close();
System.out.println("Done");
} catch (IOException e) {
e.printStackTrace();
}
}
}
要访问您的values array
你必须declar它作为一个类成员,或者在函数的顶部:
public class Main {
String[] values;
}
或刚刚在while循环之上 –
我在暗示'String [] values'需要初始化为'null'。如果没有,我*认为*你会得到一个编译器错误,因为它会认为你会试图迭代未实例化的数组。 –
@DrewKennedy类变量对象被初始化为空 –
最简单的方法,使您的阵列可见作者将在设置之前声明它。
String line = null;
String[] values = null;
然后在你的while循环中,你实例化它。
values = line.split(",");
这样它就可以被作者看到。
即使这样做,当我到我的for循环'for(int i = 0; i
然后你可以将values数组初始化为null或一个空数组(仅在知道大小时)。 –
您需要在列表中添加values
并遍历列表,或者也可以在读取文件时进行编写。
由于值的范围在while循环中读取,因此您可以选择在打印时进行书写。那就是:
while ((line = br.readLine()) != null) {
String[] values = line.split(",");
System.out.println("Your file has been evaluated, here are the contents:");
for (String str : values) {
System.out.println(str);
fw.write(str + "\n");
}
}
您可以简单地存储一个ArrayList并将该文件的每个分割行添加到该列表中。然后你可以稍后迭代这个列表。
List<String[]> linesList = new ArrayList<>();
while ((line = br.readLine()) != null) {
String[] values = line.split(",");
linesList.add(values);
System.out.println("Your file has been evaluated, here are the contents:");
for (String str : values) {
System.out.println(str);
}
}
然后你可以在它们之间迭代后...
for (String[] values : linesList) {
for (var i = values.length - 1; i >= 0; i--) {
String value = values[i];
// Store your value here using your FileWriter, etc.
}
}
只需使用bw.write(值[I] + “\ n”);确保在完成后关闭FileWriter。并且要以相反的顺序执行,只需改变for循环的方向即可:'for(int i = values.length - 1; i> = 0; i--){} – ManoDestra
很难说坏缩进,但它看起来像'values'在'while'循环的范围内,并且'try'块内不能看到。 –
您使用的是IDE吗?因为那会1)保持你的代码格式良好,并且2)告诉你在尝试在while循环外使用'values'时出现编译错误。 –