2012-12-05 67 views
1

请您指出我的代码中的错误在哪里?J2ME将文本文件读入字符串数组

我有一个具有以下数据结构的简单的文本文件:

something1 
something2 
something3 
... 

它导致一个String[],每一个元素是文件的最后一个元素。我找不到这个错误,但是在line.setLength(0);

有什么想法吗?

public String[] readText() throws IOException { 
    InputStream file = getClass().getResourceAsStream("/questions.txt"); 
    DataInputStream in = new DataInputStream(file); 

    StringBuffer line = new StringBuffer(); 
    Vector lines = new Vector(); 

    int c; 
    try { 
     while((c = in.read()) != -1) { 
      if ((char)c == '\n') { 
       if (line.length() > 0) { 
        // debug 
        //System.out.println(line.toString()); 
        lines.addElement(line); 
        line.setLength(0); 
       } 
      } 
      else{ 
       line.append((char)c); 
      } 
     } 
     if(line.length() > 0){ 
      lines.addElement(line); 
      line.setLength(0); 
     } 

     String[] splitArray = new String[lines.size()]; 
     for (int i = 0; i < splitArray.length; i++) { 
      splitArray[i] = lines.elementAt(i).toString(); 
     } 
     return splitArray; 

    } catch(Exception e) { 
     System.out.println(e.getMessage()); 
     return null; 
    } finally { 
     in.close(); 
    } 
} 

回答

3

我看到一个明显的错误 - 你在同一个StringBuffer实例多次存储在Vector,并清除相同StringBuffer实例与setLength(0)。我guesing你想要做这样的事情

StringBuffer s = new StringBuffer(); 
Vector v = new Vector(); 

... 
String bufferContents = s.toString(); 
v.addElement(bufferContents); 
s.setLength(0); 
// now it's ok to reuse s 
... 
+0

非常好,非常感谢! – farkasseb

-1

如果你的问题是读取该文件的内容的String [],那么你实际上可以使用Apache常见的FileUtil类,并在一个数组列表,阅读然后转换为数组。

List<String> fileContentsInList = FileUtils.readLines(new File("filename")); 
String[] fileContentsInArray = new String[fileContentsInList.size()]; 
fileContentsInArray = (String[]) fileContentsInList.toArray(fileContentsInArray); 

在您指定的代码中,而不是将长度设置为0,您可以重新初始化StringBuffer。

+2

对不起,我不太明白这个想法。 据我所知在javame中不支持泛型。 – farkasseb