Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从加载的文本文件输出数据时出现问题_Java_File Io - Fatal编程技术网

Java 从加载的文本文件输出数据时出现问题

Java 从加载的文本文件输出数据时出现问题,java,file-io,Java,File Io,我有一个程序,应该加载一个文本文件并显示/排序数据,但是数据根本没有显示。你知道我做错了什么吗?我只能坚持使用1.4.2Java 代码如下: import java.io.*; import java.util.StringTokenizer; class NewClass { private static int quantity; private static String[] name; public static void main(String args[]

我有一个程序,应该加载一个文本文件并显示/排序数据,但是数据根本没有显示。你知道我做错了什么吗?我只能坚持使用1.4.2Java

代码如下:

import java.io.*;
import java.util.StringTokenizer;

class NewClass {
    private static int quantity;
    private static String[] name;

    public static void main(String args[]) throws Exception {
        InputStreamReader kb = new InputStreamReader(System.in);
        BufferedReader in;   
        in = new BufferedReader(kb);
        String buffer;
        char choice;
        boolean fileread=false;

        int[]number=new int[quantity];
        String[]name=new String[quantity];

        String sorttype="";
        do
        {    //Setup Menu
            choice=menu(in);
            if(choice=='E')
            {
                if(fileread)
                    System.out.println("Data already has been entered");
                 else
                {
                    fileread=true;
                    getdata(number,name);
                 }
            }
            else if(choice=='D')
            {
                if(fileread)
                    display(number,name,in);
                else
                    System.out.println("Must enter data before it is displayed");
            }
            else if(choice=='S')
            {
                if(fileread)
                    sorttype=sort(number,name,in);
                 else
                    System.out.println("Must enter data before it is sorted");
            }
        } while(choice!='X');
    }

    //Sort Data
    public static void sortint(int[] number, String[] name)
    {
        int i,j;
        for(i=0;i<quantity-1;i++)
            for(j=i+1;j<quantity;j++)
                if(number[i]>number[j])
                {
                    swap(number,i,j);
                    swap(name,i,j);
                }
    }

    public static void sortstring(String[] name, int[] number)
    {
        int i,j;
        for(i=0;i<quantity-1;i++)
            for(j=i+1;j<quantity;j++)
                if(name[i].compareToIgnoreCase(name[j])>0)
                {
                    swap(number,i,j);
                    swap(name,i,j);
                }
    }

    public static void swap(int[] a,int i,int j)
    {
        int t;
        t=a[i];
        a[i]=a[j];
        a[j]=t;
    }

    public static void swap(String[] a,int i,int j)
    {
        String t;
        t=a[i];
        a[i]=a[j];
        a[j]=t;
    }

    public static String sort(int[] number, String[] name, BufferedReader kb)throws Exception
    {
        String buffer;
        do
        {
            //Allow user to sort the phone book
            System.out.println("What do you want to sort by?");
            System.out.println("Number");
            System.out.println("Name");
            System.out.print("Enter>>");
            buffer=kb.readLine();

            if(buffer.equalsIgnoreCase("number"))
            {
                sortint(number,name);
                print(name, number,kb);
                return buffer;
            }
            else if(buffer.equalsIgnoreCase("name"))
            {
                sortstring(name,number);
                print(name,number,kb);
                return buffer;
            }
            System.out.println("Invalid entry");
        } while(true);
    }

    public static void print(String[] name, int[] number, BufferedReader kb)throws Exception
    {
        System.out.println("Sorted data");
        System.out.println("Number\tName");
        for(int i=0;i<quantity;i++)
            System.out.println(number[i]+"\t"+name[i]);
    }

    public static void display(int[] number, String[] name, BufferedReader kb)throws Exception
    {

        System.out.println("Number    Name");
        for(int i=0;i<quantity;i++)
            System.out.println(number[i]+"    "+name[i]);
    }

    public static void getdata(int number[],String name[])throws Exception
    {
        FileReader file = new FileReader("phoneData.txt");
        try (BufferedReader input = new BufferedReader(file)) {
            int i;
            String buffer;
            for( i=0;i<quantity;i++)
            {
                buffer=input.readLine();
                StringTokenizer st = new StringTokenizer(buffer, ",");
                name[i]=st.nextToken();
                number[i]=Integer.parseInt((st.nextToken()).trim());
            }
        }
    }

    public static char menu(BufferedReader kb)throws Exception
    {
        String buffer;
        char input;
        do
        {
            System.out.println("\nWhat would you like to do?");
            System.out.println("E-Enter phone book data");
            System.out.println("D-Display phone book data");
            System.out.println("X-Exit program");
            System.out.println("S-Sort list");
            System.out.print("Enter E, D, X, S>>");
            buffer=kb.readLine();
            input=(buffer.toUpperCase()).charAt(0);
            if(input=='E'||input=='D'||input=='X'||input=='S')
                 return input;
            System.out.println("Invalid entry");
        } while(true);
    }
}

非常感谢您的帮助。

您可能需要初始化
数量

private static int quantity = 1;
而不仅仅是

private static int quantity;
这样循环中的代码

for( i=0;i<quantity;i++)
因为您在
main
中本地声明了
name

编辑

public static void getdata(int number[],String name[])throws Exception
{
    BufferedReader input = null;
    try {
        input = new BufferedReader(new FileReader("phoneData.txt")); 
        int i;
        String buffer;
        for( i=0;i<quantity;i++)
        {
            // readLinde returns null when EOF is reached
            buffer=input.readLine();
            if(buffer != null) {
                StringTokenizer st = new StringTokenizer(buffer, ",");
                name[i]=st.nextToken();
                number[i]=Integer.parseInt((st.nextToken()).trim());
            } else {
                break; // since nothing left to read
                // remaining buckets in the arrays are left empty
            }
        }
    } catch (Exception e) {
        // catch exceptions to where know your program fails
        System.out.println(e.toString());
    } finally {
        if(input != null) {
            // close the input stream when you are done
            input.close();
        }
    }
}

@user1965245
phoneData.txt
可能只是空的或不存在(因为有异常,所以您不会知道它)。。。您没有检查
input.readLine()
的返回值,而是从
0
读取到
quantity-1
。如果文件中的数据行数小于数量,那么您将在
StringTokenizer
上获得一个NPE。。。而且你似乎没有任何输入数据的菜单选项。。。而且您的
E
菜单选项有误导性,因为它从文件中读取数据…您想做什么?E-输入电话簿数据D-显示电话簿数据X-退出程序S-排序列表输入E,D,X,S>>D号码姓名号码数据应在“号码”下,但其为空,对于name@user1965245如果输入了
E
,则方法为
getdata(编号、名称),并将
fileread
设置为
true
。如何用数据填充文件?“我必须坚持只使用1.4.2 Java”哎哟!为什么?@A4L文件已填充,文件中没有任何内容更改。按E键将文件加载到程序中,其他选项将对文件中的数据进行排序和显示,然后我得到
您想做什么?E-Enter phone book data D-Display phone book data X-Exit program S-Sort list在java.util.StringTokenizer.nextToken(StringTokenizer.java:349)的NewClass.getdata(NewClass.java:130)的NewClass.main(NewClass.java:27)的线程“main”中输入E,D,X,S>>E异常
@user1965245你读过我的第一条评论吗??我在其中提到了所有这些,看看javadoc的说明,当传递的字符串为null时,它抛出一个
N
ull
P
ointer
E
异常,当到达流的末尾时返回null。。。请参阅我的编辑,了解如何使代码更加健壮。我不太了解tokenizer,我在线阅读了如何在代码中使用它。所以我不确定是否有任何错误。这只是我的第一年
private static String[] name;
public static void getdata(int number[],String name[])throws Exception
{
    BufferedReader input = null;
    try {
        input = new BufferedReader(new FileReader("phoneData.txt")); 
        int i;
        String buffer;
        for( i=0;i<quantity;i++)
        {
            // readLinde returns null when EOF is reached
            buffer=input.readLine();
            if(buffer != null) {
                StringTokenizer st = new StringTokenizer(buffer, ",");
                name[i]=st.nextToken();
                number[i]=Integer.parseInt((st.nextToken()).trim());
            } else {
                break; // since nothing left to read
                // remaining buckets in the arrays are left empty
            }
        }
    } catch (Exception e) {
        // catch exceptions to where know your program fails
        System.out.println(e.toString());
    } finally {
        if(input != null) {
            // close the input stream when you are done
            input.close();
        }
    }
}
public static void getdata(List number,List name) {
    BufferedReader input = null;
    try {
        input = new BufferedReader(new FileReader("phoneData.txt")); 
        String buffer;
        while(null != (buffer = input.readLine())) {
            StringTokenizer st = new StringTokenizer(buffer, ",");
            name.add(st.nextToken());
            number.add(Integer.valueOf(Integer.parseInt((st.nextToken()).trim())));

        }
    } catch (Exception e) {
        System.out.println(e.toString());
    } finally {
        if(input != null) {
            try {
                input.close();
            } catch (IOException e) {
                // ignore
            }
        }
    }
}