无法将文件阅读器合并到代码中

时间:2013-05-16 13:26:18

标签: java filereader

我编写了这段代码并且差不多完成了,但是我很想知道如何在我的代码中实现filereader,将数据从文件放入现有的数据列表/数组中。我已经在网站上查看了如何将文件读取器放入,但是一直被语法困扰:(我也被迫坚持使用Java 1.4.2,所以我不能使用Scanner和那些东西。

以下是不完整的代码:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
//Import libraries


public class phoneBook
{

    static ArrayList ListNumbers = new ArrayList(); //Create array
    public static void main(String[] args)
    {
        InputStreamReader inp = null;
        BufferedReader input = null;//Create inputstreamreader and bufferedreader
        int nOption  = 0;
        try
        {
            inp = new InputStreamReader(System.in);
            input = new BufferedReader(inp);
            while(true)
            {
        System.out.println("Welcome to PDA Phonebook");
        System.out.println(" " + "\nWhat would you like to do?");
                System.out.println("1. Enter Phone Numbers/ Add a Phone Number.");
                System.out.println("2. Modify Phone Number.");
                System.out.println("3. Delete Phone Number.");
                System.out.println("4. Sort Phone Number.");
                System.out.println("5. Show all Phone Numbers.");
        System.out.println("6. Load Phone Numbers.");
                System.out.println("7. Exit.");
                System.out.println("\nChoose an option(1-7) >> ");
                nOption = Integer.parseInt(input.readLine());
                //Layout visual menu
                switch(nOption)
                {
                    case 1:
                        AddNumber(input);
                        break;
                    case 2:
                        ModifyNumber(input);
                        break;
                    case 3:
                        DeleteNumber(input);
                        break;
                    case 4:
                        SortNumber(input);
                        break;
                    case 5:
                        ShowAllNumbers();
                        break;
            case 6:
            LoadNumbers(input);
            break;
                    case 7:
                        System.out.println("Exiting program. Press any key to continue....");
                        input.read();
                        System.exit(0);
                        break;
        //Create cases for the input of the user
                }
            }
        }
        catch(Exception exp)
        {
        }
    }

//create private static void for each option in the list

    private static void AddNumber(BufferedReader input) throws IOException
    {

    NumberTemplate tmpObject = null;
    tmpObject = new NumberTemplate();//create tmp object for new phone numbers
        while(true)
        {

            System.out.println("Name belonging to the phone number >> ");
            tmpObject.NumberName = input.readLine().toString();//Convert input of name to a string
            System.out.println("Phone Number");
            tmpObject.Number = input.readLine().toString(); //Convert input of phone number to a string
            if(tmpObject != null)
                ListNumbers.add(tmpObject);//Add the new phone number to the list of numbers

            System.out.println("\n Do you want to add another phone number?(y/n) >>");            
            if(!input.readLine().toLowerCase().equals("y"))//Ask user if they want to add another number
                break;//Return to list
        }
    }

    private static void ModifyNumber(BufferedReader input) throws IOException
    {
         NumberTemplate tmpObject = null;
         System.out.println("Name of the number to modify >> ");
         String OldNumberName = input.readLine();//User inputs name of number they want to edit
         int index = getNumberIndexByName(OldNumberName);
         if(index == -1)//if the number does not exist
         {
             System.out.println(" Number belonging to " + OldNumberName+ " not found.");//Tell the user if they entered an nonexistant number name
     }
         else//if number does exist
         {
             tmpObject = (NumberTemplate)ListNumbers.get(index);
             showNumber(tmpObject);
             System.out.println("What you want to modify (Name|Number)? >>");
             String strOption = input.readLine();//User chooses what they want to edit from the number
             if("name".equals(strOption.toLowerCase()))
             {
                System.out.println("New Name belonging to the number >> ");
                tmpObject.NumberName = input.readLine().toString();//User inputs the name they want to change the number to
             }
             else  if("number".equals(strOption.toLowerCase()))
             {
                System.out.println("New number "+tmpObject.NumberName);
                tmpObject.Number = input.readLine().toString();//User inputs the number they want to change
             }
             else
             {
                 System.out.println("Unable to locate the property entered..");
             }
             ListNumbers.set(index, tmpObject);//Apply the changes to the list of numbers
         }
    }

    private static int getNumberIndexByName(String Name)
    {
        int index = -1;
        NumberTemplate tmp =null;
        for(int i=0;i<ListNumbers.size();i++)
        {
            tmp = (NumberTemplate)ListNumbers.get(i);
            if(tmp.NumberName.toLowerCase().equals(Name.toLowerCase()))
            {    
                index = i;
                break;
            }
        }
        return index;//List numbers
    }

    private static void showNumber(NumberTemplate tnumber)
    {
        System.out.println(tnumber.NumberName+"\t\t"+tnumber.Number);
    }

    private static void DeleteNumber(BufferedReader input) throws IOException
    {
         System.out.println("Name of the number to delete >> ");
         String OldNumberName = input.readLine();
         int index = getNumberIndexByName(OldNumberName);
         if(index == -1)//If number name doesn't exist
         {
             System.out.println(" Number belonging to " + OldNumberName+ " not found.");
         }
         else//if number name exists
         {
             ListNumbers.remove(index);//Remove the number from list of numbers
             System.out.println(" Number belonging to " + OldNumberName+ "deleted successfully.");
         }
    }

    private static void SortNumber(BufferedReader input) throws IOException
    {
         System.out.println("Enter the key to sort (Name|Number)? >>");
         String strOption = input.readLine();//User inputs what they want to sort the numbers by
         int nSize = ListNumbers.size();
         String str1, str2;
         if("name".equals(strOption.toLowerCase()))//Sort numbers by name
         {
             for(int i = 0;i<nSize;i++)
             {
                 for(int j = (i+1);j<nSize;j++)
                 {
                     str1 = ((NumberTemplate)ListNumbers.get(i)).NumberName;
                     str2 = ((NumberTemplate)ListNumbers.get(j)).NumberName;

                     if(str1.compareToIgnoreCase(str2) > 0)
                     {
                         NumberTemplate  tmp = (NumberTemplate) ListNumbers.get(i);
                         ListNumbers.set(i, (NumberTemplate) ListNumbers.get(j));
                         ListNumbers.set(j, tmp);
                     }
                 }
             }
         }
         else  if("number".equals(strOption.toLowerCase()))//Sort numbers by number
         {
             for(int i = 0;i<nSize;i++)
             {
                 for(int j = (i+1);j<nSize;j++)
                 {
                     str1 = ((NumberTemplate)ListNumbers.get(i)).Number;
                     str2 = ((NumberTemplate)ListNumbers.get(j)).Number;

                     if(str1.compareToIgnoreCase(str2) > 0)
                     {   
                         NumberTemplate  tmp = (NumberTemplate) ListNumbers.get(i);
                         ListNumbers.set(i, (NumberTemplate) ListNumbers.get(j));
                         ListNumbers.set(j, tmp);
                     }
                 }
             }
         }

         else
         {
             System.out.println("Unable to locate the property entered..");
         }
         ShowAllNumbers();
    }

    private static void ShowAllNumbers()
    {
         System.out.println("PDA Phone Book\n");//List all the numbers
         System.out.println("Name\t\tNumber");
         for(int i=0;i<ListNumbers.size();i++)
         {

             showNumber((NumberTemplate)ListNumbers.get(i));
         }
    }


    private static void LoadNumbers(BufferedReader input) throws FileNotFoundException, IOException
    {
    {BufferedReader in = new BufferedReader(new FileReader("phoneBook.txt"));
    while(true)
    {
        NumberTemplate tmpObject = null;
            String line = in.readLine();
            if (line == null)
                break;
            NumberTemplate nt = new NumberTemplate();
            nt.NumberName = line;
            line = in.readLine();
        nt.Number = Integer.parseInt(line);
            ListNumbers.add(nt);

    }
    }
}



class NumberTemplate
{
    public String NumberName = "";
    public String Number = "";

}
}

这就是我遇到问题的地方:

private static void LoadNumbers(BufferedReader input) throws FileNotFoundException, IOException
{
{BufferedReader in = new BufferedReader(new FileReader("phoneBook.txt"));
while(true)
{
    NumberTemplate tmpObject = null;
        String line = in.readLine();
        if (line == null)
            break;
        NumberTemplate nt = new NumberTemplate();
        nt.NumberName = line;
        line = in.readLine();
    nt.Number = Integer.parseInt(line);
        ListNumbers.add(nt);

}
}

出现以下错误:

C:\Java\bin>javac phoneBook.java
phoneBook.java:81: error: non-static variable this cannot be referenced from a s
tatic context
        tmpObject = new NumberTemplate();//create tmp object for new phone numbe
rs
                    ^
phoneBook.java:240: error: non-static variable this cannot be referenced from a
static context
                NumberTemplate nt = new NumberTemplate();
                                    ^
phoneBook.java:243: error: incompatible types
                nt.Number = Integer.parseInt(line);
                                            ^
  required: String
  found:    int
Note: phoneBook.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
3 errors

该文件由45个名称和数字组成,格式为:

name
number
name
number
etc....

1 个答案:

答案 0 :(得分:1)

您已将使用input初始化的System.in传递给每个方法。你可能想要像

这样的东西
BufferedReader in = new BufferedReader(new FileReader("foo"));

并将in传递给方法。您需要一个额外的变量,因为您想使用标准输入流和文件输入流。您也可以使用公共字段。

有关详细信息,请查看herehere

while(true)
{
    String line = in.readLine();
    if (line == null)
        break;
    NumberTemplate nt = new NumberTemplate();
    nt.NumberName = line;
    line = in.readLine();
    nt.Number = Integer.parseInt(line);
    ListNumbers.add(nt);
}

可能有一些try/catch

此代码重复直到文件末尾,读取名称,在NumberTemplate实例中设置适当的值,然后解析整数并执行相同操作。最后,它会将其添加到ArrayList

编译代码

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
//Import libraries


public class phoneBook
{

    static ArrayList ListNumbers = new ArrayList(); //Create array
    public static void main(String[] args)
    {
        InputStreamReader inp = null;
        BufferedReader input = null;//Create inputstreamreader and bufferedreader
        int nOption  = 0;
        try
        {
            inp = new InputStreamReader(System.in);
            input = new BufferedReader(inp);
            while(true)
            {
        System.out.println("Welcome to PDA Phonebook");
        System.out.println(" " + "\nWhat would you like to do?");
                System.out.println("1. Enter Phone Numbers/ Add a Phone Number.");
                System.out.println("2. Modify Phone Number.");
                System.out.println("3. Delete Phone Number.");
                System.out.println("4. Sort Phone Number.");
                System.out.println("5. Show all Phone Numbers.");
        System.out.println("6. Load Phone Numbers.");
                System.out.println("7. Exit.");
                System.out.println("\nChoose an option(1-7) >> ");
                nOption = Integer.parseInt(input.readLine());
                //Layout visual menu
                switch(nOption)
                {
                    case 1:
                        AddNumber(input);
                        break;
                    case 2:
                        ModifyNumber(input);
                        break;
                    case 3:
                        DeleteNumber(input);
                        break;
                    case 4:
                        SortNumber(input);
                        break;
                    case 5:
                        ShowAllNumbers();
                        break;
            case 6:
            LoadNumbers(input);
            break;
                    case 7:
                        System.out.println("Exiting program. Press any key to continue....");
                        input.read();
                        System.exit(0);
                        break;
        //Create cases for the input of the user
                }
            }
        }
        catch(Exception exp)
        {
        }
    }

//create private static void for each option in the list

    private static void AddNumber(BufferedReader input) throws IOException
    {

    NumberTemplate tmpObject = null;
    tmpObject = new NumberTemplate();//create tmp object for new phone numbers
        while(true)
        {

            System.out.println("Name belonging to the phone number >> ");
            tmpObject.NumberName = input.readLine().toString();//Convert input of name to a string
            System.out.println("Phone Number");
            tmpObject.Number = input.readLine().toString(); //Convert input of phone number to a string
            if(tmpObject != null)
                ListNumbers.add(tmpObject);//Add the new phone number to the list of numbers

            System.out.println("\n Do you want to add another phone number?(y/n) >>");            
            if(!input.readLine().toLowerCase().equals("y"))//Ask user if they want to add another number
                break;//Return to list
        }
    }

    private static void ModifyNumber(BufferedReader input) throws IOException
    {
         NumberTemplate tmpObject = null;
         System.out.println("Name of the number to modify >> ");
         String OldNumberName = input.readLine();//User inputs name of number they want to edit
         int index = getNumberIndexByName(OldNumberName);
         if(index == -1)//if the number does not exist
         {
             System.out.println(" Number belonging to " + OldNumberName+ " not found.");//Tell the user if they entered an nonexistant number name
     }
         else//if number does exist
         {
             tmpObject = (NumberTemplate)ListNumbers.get(index);
             showNumber(tmpObject);
             System.out.println("What you want to modify (Name|Number)? >>");
             String strOption = input.readLine();//User chooses what they want to edit from the number
             if("name".equals(strOption.toLowerCase()))
             {
                System.out.println("New Name belonging to the number >> ");
                tmpObject.NumberName = input.readLine().toString();//User inputs the name they want to change the number to
             }
             else  if("number".equals(strOption.toLowerCase()))
             {
                System.out.println("New number "+tmpObject.NumberName);
                tmpObject.Number = input.readLine().toString();//User inputs the number they want to change
             }
             else
             {
                 System.out.println("Unable to locate the property entered..");
             }
             ListNumbers.set(index, tmpObject);//Apply the changes to the list of numbers
         }
    }

    private static int getNumberIndexByName(String Name)
    {
        int index = -1;
        NumberTemplate tmp =null;
        for(int i=0;i<ListNumbers.size();i++)
        {
            tmp = (NumberTemplate)ListNumbers.get(i);
            if(tmp.NumberName.toLowerCase().equals(Name.toLowerCase()))
            {    
                index = i;
                break;
            }
        }
        return index;//List numbers
    }

    private static void showNumber(NumberTemplate tnumber)
    {
        System.out.println(tnumber.NumberName+"\t\t"+tnumber.Number);
    }

    private static void DeleteNumber(BufferedReader input) throws IOException
    {
         System.out.println("Name of the number to delete >> ");
         String OldNumberName = input.readLine();
         int index = getNumberIndexByName(OldNumberName);
         if(index == -1)//If number name doesn't exist
         {
             System.out.println(" Number belonging to " + OldNumberName+ " not found.");
         }
         else//if number name exists
         {
             ListNumbers.remove(index);//Remove the number from list of numbers
             System.out.println(" Number belonging to " + OldNumberName+ "deleted successfully.");
         }
    }

    private static void SortNumber(BufferedReader input) throws IOException
    {
         System.out.println("Enter the key to sort (Name|Number)? >>");
         String strOption = input.readLine();//User inputs what they want to sort the numbers by
         int nSize = ListNumbers.size();
         String str1, str2;
         if("name".equals(strOption.toLowerCase()))//Sort numbers by name
         {
             for(int i = 0;i<nSize;i++)
             {
                 for(int j = (i+1);j<nSize;j++)
                 {
                     str1 = ((NumberTemplate)ListNumbers.get(i)).NumberName;
                     str2 = ((NumberTemplate)ListNumbers.get(j)).NumberName;

                     if(str1.compareToIgnoreCase(str2) > 0)
                     {
                         NumberTemplate  tmp = (NumberTemplate) ListNumbers.get(i);
                         ListNumbers.set(i, (NumberTemplate) ListNumbers.get(j));
                         ListNumbers.set(j, tmp);
                     }
                 }
             }
         }
         else  if("number".equals(strOption.toLowerCase()))//Sort numbers by number
         {
             for(int i = 0;i<nSize;i++)
             {
                 for(int j = (i+1);j<nSize;j++)
                 {
                     str1 = ((NumberTemplate)ListNumbers.get(i)).Number;
                     str2 = ((NumberTemplate)ListNumbers.get(j)).Number;

                     if(str1.compareToIgnoreCase(str2) > 0)
                     {   
                         NumberTemplate  tmp = (NumberTemplate) ListNumbers.get(i);
                         ListNumbers.set(i, (NumberTemplate) ListNumbers.get(j));
                         ListNumbers.set(j, tmp);
                     }
                 }
             }
         }

         else
         {
             System.out.println("Unable to locate the property entered..");
         }
         ShowAllNumbers();
    }

    private static void ShowAllNumbers()
    {
         System.out.println("PDA Phone Book\n");//List all the numbers
         System.out.println("Name\t\tNumber");
         for(int i=0;i<ListNumbers.size();i++)
         {

             showNumber((NumberTemplate)ListNumbers.get(i));
         }
    }


    private static void LoadNumbers(BufferedReader input) throws FileNotFoundException, IOException
    {
    BufferedReader in = new BufferedReader(new FileReader("phoneBook.txt"));
    while(true)
    {
        NumberTemplate tmpObject = null;
            String line = in.readLine();
            if (line == null)
                break;
            NumberTemplate nt = new NumberTemplate();
            nt.NumberName = line;
            line = in.readLine();
        nt.Number = line;
            ListNumbers.add(nt);

    }

}
}



class NumberTemplate
{
    public String NumberName = "";
    public String Number = "";

}