2014-03-26 25 views
-1

嘗試在用戶將文件名輸入控制檯時讀取文件。該程序編譯和運行沒有錯誤。一旦你輸入文件名並按回車,你會得到這個錯誤。無法弄清楚原因。任何幫助,將不勝感激。Main中的NullPointerException錯誤

Exception in thread "main" java.lang.NullPointerException 
at java.io.Writer.<init>(Writer.java:88) 
at java.io.PrintWriter.<init>(PrintWriter.java:113) 
at java.io.PrintWriter.<init>(PrintWriter.java:100) 
at propertylistings.propertylistings.main(propertylistings.java:34) 

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.Scanner; 
import java.util.Set; 
import java.util.SortedMap; 
import java.util.TreeMap; 
import java.util.TreeSet; 

public class propertylistings { 

    public static void main(String[] args) 

    throws FileNotFoundException 

    { 

     // Prompt for the input file name 

     Scanner console = new Scanner(System.in); 
     System.out.print("Input file: "); 
     String inputFileName = console.next(); 
     BufferedWriter pwfo = null; 

     try { 
      pwfo = new BufferedWriter(new FileWriter("C:\\agentReport.txt", 
        true)); 
     } catch (IOException e) { 
     } 
//next line is LINE 34 
     PrintWriter pwo = new PrintWriter(pwfo); 

     // Construct property type treeSet 

     Set<String> propertyTypes = pTypes(inputFileName); 

     // Print property types from treeSet 

     for (String type : propertyTypes) { 
      System.out.println(type); 
      pwo.println(type); 
     } 

     // Construct agent ids and values treeSet 

     Set<String> agentRpt = agentValue(inputFileName); 

     // Print agent Ids and values from key set 

     for (String tail : agentRpt) { 
      { 
       System.out.println(tail); 
       pwo.println(tail); 
      } 
     } 
     pwo.flush(); 
     pwo.close(); 
    } 

    // Reads the input file. 
    // @return the alphabetized property types in uppercase. 

    public static Set<String> pTypes(String inputFileName) 
      throws FileNotFoundException 

    // Construct a tree set to return property types 
    { 
     Set<String> type = new TreeSet<String>(); 
     Scanner in = new Scanner(new File(inputFileName)); 

     // Use delimiters to select specific chars for set 

     in.useDelimiter("[1234567890. ]"); 
     while (in.hasNext()) { 
      type.add(in.next().toUpperCase()); 
     } 
     in.close(); 
     return type; 
    } 

    // Reads the input file. 
    // @returns the Agent id's and corresponding property values. 

    public static Set<String> agentValue(String inputFileName) 
      throws FileNotFoundException { 
     TreeSet<String> tail = new TreeSet<String>(); 
     SortedMap<String, Number> agentValues = new TreeMap<String, Number>(); 
     Scanner in = new Scanner(new File(inputFileName)); 
     String line = inputFileName; 

     while (in.hasNextLine()) { 
      try { 
       line = in.nextLine(); 
       String[] fields = line.split("[\\s}]"); 
       String agentId = (fields[3]); 
       Double pValue = Double.parseDouble(fields[2]); 

       if (agentValues.containsKey(agentId)) { 
        pValue += agentValues.get(agentId).doubleValue(); 
       } 
       agentValues.put(agentId, pValue); 

      } catch (Exception e) { 
      } 

      // Create keyMap with all keys and values 

      Set<String> keySet = agentValues.keySet(); 
      for (String key : keySet) { 
       Number value = agentValues.get(key); 

       // System.out.println(key + ":" + value); 

       tail.add(key + ":" + value); 
      } 
     } 
     return tail; 
    } 
} 
+5

'catch(IOException e){}'不好。很有可能你收到了'IOException'並且忽略了它,而'pwfo''null'。 – rgettman

回答

0

把stacktrace放入你的catch塊中,你就會知道確切的錯誤。

try { 
     pwfo = new BufferedWriter(new FileWriter("C:\\agentReport.txt", true)); 
     } catch (IOException e) { 
      e.printstacktrace(); 
     } 
+0

添加堆棧跟蹤工作。它試圖將文件寫入需要管理員權限的文件夾。謝謝你的幫助! – user3466177