2016-04-06 62 views
0

我对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(); 
     } 
    } 
} 
+0

只需使用bw.write(值[I] + “\ n”);确保在完成后关闭FileWriter。并且要以相反的顺序执行,只需改变for循环的方向即可:'for(int i = values.length - 1; i> = 0; i--){} – ManoDestra

+1

很难说坏缩进,但它看起来像'values'在'while'循环的范围内,并且'try'块内不能看到。 –

+0

您使用的是IDE吗?因为那会1)保持你的代码格式良好,并且2)告诉你在尝试在while循环外使用'values'时出现编译错误。 –

回答

0

要访问您的values array你必须declar它作为一个类成员,或者在函数的顶部:

public class Main { 
    String[] values; 
} 
+1

或刚刚在while循环之上 –

+0

我在暗示'String [] values'需要初始化为'null'。如果没有,我*认为*你会得到一个编译器错误,因为它会认为你会试图迭代未实例化的数组。 –

+0

@DrewKennedy类变量对象被初始化为空 –

1

最简单的方法,使您的阵列可见作者将在设置之前声明它。

String line = null; 
String[] values = null; 

然后在你的while循环中,你实例化它。

values = line.split(","); 

这样它就可以被作者看到。

+0

即使这样做,当我到我的for循环'for(int i = 0; i javamatrix

+0

然后你可以将values数组初始化为null或一个空数组(仅在知道大小时)。 –

0

您需要在列表中添加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"); 
    } 
} 
0

您可以简单地存储一个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. 
    } 
}