2013-05-16 55 views
0

我寫了這個代碼和我差不多完成了,但我堅持想知道如何實現的FileReader到我的代碼,把數據從文件到數字的現有列表/陣列。我擡起頭,在網站上如何投入的FileReader,但語法已經難倒了一遍又一遍:(我也不得不堅持與Java 1.4.2,所以我不能使用掃描儀和的東西。麻煩的FileReader結合成代碼

這裏是不完整的代碼:

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.... 
+4

你呈現超過200行代碼,但實際上沒有說是哪裏的問題。我們可能不需要看到你的整個程序 - 我們只需要知道有問題的部分,理想情況下與其他所有部分分離爲一個簡短但完整的程序,它不做任何事情*但顯示問題。請參閱http://tinyurl.com/so-list –

回答

1

你傳遞inputSystem.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 = ""; 

} 
+0

我不需要更改文件中的任何數據,我只是想將其加載到數組中。我不是一個非常有經驗的編碼員,這只是我的第一年.. – Frisbee68

+0

@ user1965245你沒有改變這個代碼的任何東西,它以讀模式打開文件。 – Mateusz

+0

那麼如何將文件中的信息放入數組? – Frisbee68