Java 将文本文件输入插入到链接列表中

Java 将文本文件输入插入到链接列表中,java,file-io,linked-list,Java,File Io,Linked List,嘿,伙计们,我正试图从一个文本文件中读取并将每个名称存储到一个链表节点中。当我读入文本文件时,它会读取行,这是一个名称。我试图将每个名称存储到链接列表节点中。当我调用insertBack方法并将其打印出来时,它显示节点中没有任何内容。谁能给我指出正确的方向,我将不胜感激 以下是课堂上的文件: import java.util.Scanner; import java.io.*; public class fileIn { String fname; public fileI

嘿,伙计们,我正试图从一个文本文件中读取并将每个名称存储到一个链表节点中。当我读入文本文件时,它会读取行,这是一个名称。我试图将每个名称存储到链接列表节点中。当我调用insertBack方法并将其打印出来时,它显示节点中没有任何内容。谁能给我指出正确的方向,我将不胜感激

以下是课堂上的文件:

import java.util.Scanner;

import java.io.*;

public class fileIn {
    String fname;

    public fileIn() {
        getFileName();
        readFileContents();
    }

    public void readFileContents()
    {
        boolean looping;
        DataInputStream in;
        String line;
        int j, len;
        char ch;

        /* Read input from file and process. */
        try {
            in = new DataInputStream(new FileInputStream(fname));
            LinkedList l = new LinkedList();

            looping = true;
            while(looping) {
                /* Get a line of input from the file. */
                if (null == (line = in.readLine())) {
                    looping = false;
                    /* Close and free up system resource. */
                    in.close();
                }
                else {
                    System.out.println("line = "+line);
                    j = 0;
                    len = line.length();
                    for(j=0;j<len;j++){
                        System.out.println("line["+j+"] = "+line.charAt(j));
                    }
                }
                l.insertBack(line);
            } /* End while. */

        } /* End try. */

        catch(IOException e) {
            System.out.println("Error " + e);
        } /* End catch. */
    }

    public void getFileName()
    {
        Scanner in = new Scanner(System.in);

        System.out.println("Enter file name please.");
        fname = in.nextLine();
        System.out.println("You entered "+fname);
    }

}
最后是具有main方法的LinkedList类:

import java.util.Scanner;

public class LinkedList {

    public LinkedListNode head;

    public static void main(String[] args) {

        fileIn f = new fileIn();
        LinkedList l = new LinkedList();
        System.out.println(l.showList());   
    }

    public LinkedList() {
        this.head = null;
    }

    public void insertBack(String data){
        if(head == null){
            head = new LinkedListNode(data);
        }else{
            LinkedListNode newNode = new LinkedListNode(data);
            LinkedListNode current = head;
            while(current.getNext() != null){
                current = current.getNext();
            }
            current.setNext(newNode);
        }       
    }

    public String showList(){
        int i = 0;
        String retStr = "List nodes:\n";
        LinkedListNode current = head;
        while(current != null){
            i++;
            retStr += "Node " + i + ": " + current.getData() + "\n";
            current = current.getNext();

        }

        return retStr;
    }
}

问题是您在
文件中创建了
链接列表

但是,您不会将其导出:

  fileIn f = new fileIn();
  LinkedList l = new LinkedList();
你需要的是这样的东西:

  fileIn f = new fileIn();
  LinkedList l = f.readFileContents(String filename, new LinkedList()); 
public class fileIn {
    ...
    public void readFileContents(String fileName, LinkedList) {
        // fill linked list
    }
    ...
}
将方法更改为使用您创建的
LinkedList
,然后填充它。因此,
fileIn
类可能如下所示:

  fileIn f = new fileIn();
  LinkedList l = f.readFileContents(String filename, new LinkedList()); 
public class fileIn {
    ...
    public void readFileContents(String fileName, LinkedList) {
        // fill linked list
    }
    ...
}

您是否看到从调试语句中在控制台中打印出来的读取文本?我建议使用
BufferedReader
InputStreamReader
而不是
DataInputStream
DataInputStream.readLine
已被弃用。在控制台中,我可以看到它在哪里显示line=Shawn(或任何其他名称)ad,然后它在第[j]行上显示存储到数组中的每个字母。当它到达我的showList方法时,它只显示列表节点:后面没有其他内容。啊,很高兴知道,我将尝试改变它,同时我将试图找出这有什么问题。@PaulDraper in
fileIn::readFileContents()
他创建并填充了一个
链接列表
,然后再也不导出它。您是否建议我将其重写为链接列表类的导出行并在那里创建列表?还是同样有效?@Shawn我建议您使用一种方法,获取并返回
LinkedList
,例如
public void readFileContents(LinkedList)
。然后将其称为
fileIn.readFileContents(newlinkedlist())
或类似的更灵活、更清晰的名称。此外,如另一条注释所述,请使用
BufferedReader
而不是
DataInputStream
。摆脱那个丑陋的for(,,)循环。只需在((line=br.readLine())!=null)
时执行
。。。填写链接列表。搜索或阅读一些Java教程,您将了解所有内容。您可以通过多种方式完成。只需确保您填写的内容,
LinkedList
,是可访问的。帮个忙,访问“Java Ranch”或在线Java教程。它们将帮助您编写清晰有效的代码。