为什么我的代码上一直出现“java.io.FileNotFoundException”错误?

时间:2017-04-12 04:13:31

标签: java filenotfoundexception file-not-found

我一直在努力修复此代码几个小时,并访问过该网站上的无数问题。

我为代码转储道歉,但我不确定代码出了什么问题。

错误基于读取文件,但我将所有代码都包含在内是安全的。

package ch7;
import java.util.Scanner;
import java.io.*;    
public class DistributionChart 
{   
  public static void main (String[] args) throws IOException
   {
      int size = 10;
      int[] ranges = new int[size];  // each entry represents a range of values          
      getData(ranges);   //pass the entire array into the method          
      displayChart(ranges);          
      getDataFromFile(ranges);          
      displayChartToFile(ranges);          
      System.out.println("\nSee you later!!");          
   } //end of main       
   public static void getData(int[] someArray)
   {           
       Scanner scan = new Scanner (System.in);     
       System.out.println ("Enter a series of numbers between 1 and 100. Separate each number with a space.");
       System.out.println ("Signal the end by entering a number outside " +
             "of that range and then press enter.");
       System.out.print("Go: ");           
       //reads an arbitrary number of integers that are in the range 1 to 100 inclusive
       //for each integer read in, determine which range it is in and increment the corresponding element in the array         
       //your code goes here
          int values = 0;             
          values = scan.nextInt();            
          while(values > 0 && values < 101)
          {
              if(values >= 1 && values <= 10)
              {                   
                  someArray[0]++;
              }               
              else if (values >= 11 && values <= 20)
              {                   
                   someArray[1] ++;
              }
              else if (values >= 21 && values <= 30)
              {                   
                   someArray[2]++;
              }
              else if(values >= 31 && values <= 40)
              {                   
                  someArray[3]++;
              }               
              else if(values >= 41 && values <= 50)
              {
                  someArray[4]++;
              }               
              else if(values >= 51 && values <= 60)
              {
                someArray[5]++;                 
              }               
              else if(values >= 61 && values <= 70)
              {
                  someArray[6]++;
              }               
              else if(values >= 71 && values <= 80)
              {
                  someArray[7]++;
              }               
              else if(values >= 81 && values <= 90)
              {
                   someArray[8]++;
              }               
              else if(values >= 91 && values <= 100)
              {
                   someArray[9]++;
              }               
              values = scan.nextInt();                
          }         
        scan.close();  
   }//end of getData       
   public static void displayChart(int[] someArray)
   {
       System.out.println("Distribution chart by Royce T.");
       System.out.println("================================");   
       //Print histogram.
         for(int i = 0; i < someArray.length; i++)
       {    
           System.out.print( ((i * 10 + 1)) + "-" + (((i *10 +1)) + 9) + " \t" + "|");             
           for(int y = 0; y < someArray[i]; y++)
           {
               System.out.print("*");
           }
              System.out.println();
          }

   } //end of displayChart    
   public static void getDataFromFile(int[] someArray) throws IOException
   {
       Scanner inFile = new Scanner(new FileReader("C:/Users/RTmag/workspaceRATI//CSC110/inputFile.txt"));
       int values = 0;
       while(inFile.hasNext())
       {               
              values = inFile.nextInt();                  
              while(values > 0 && values < 101)
              {
                  if(values >= 1 && values <= 10)
                  {                       
                      someArray[0]++;
                  }                   
                  else if (values >= 11 && values <= 20)
                  {                       
                       someArray[1] ++;
                  }
                  else if (values >= 21 && values <= 30)
                  {                       
                       someArray[2]++;
                  }
                  else if(values >= 31 && values <= 40)
                  {                       
                      someArray[3]++;
                  }                   
                  else if(values >= 41 && values <= 50)
                  {
                      someArray[4]++;
                  }                   
                  else if(values >= 51 && values <= 60)
                  {
                    someArray[5]++;
                  }
                  else if(values >= 61 && values <= 70)
                  {
                      someArray[6]++;
                  }                   
                  else if(values >= 71 && values <= 80)
                  {
                      someArray[7]++;
                  }                   
                  else if(values >= 81 && values <= 90)
                  {
                       someArray[8]++;
                  }                   
                  else if(values >= 91 && values <= 100)
                  {
                       someArray[9]++;
                  }                   
                  values = inFile.nextInt();                      
              }             
            inFile.close();
       }
   }
       public static void displayChartToFile(int[] someArray) throws IOException
       {
           getDataFromFile(someArray);
           PrintWriter outFile = new PrintWriter( "C:/Users/RTmag/workspaceRATI//CSC110/outputFile.txt");        
           //Print chart title with your name
           outFile.println("Distribution chart by Royce T.");
           outFile.println("================================");
           //Print histogram.
           for(int i = 0; i < someArray.length; i++)
           {    
               outFile.print( ((i * 10 + 1)) + "-" + (((i *10 +1)) + 9) + " \t" + "|");                
               for(int x = 0; x <someArray[i]; x++)
               {
                 outFile.print("*");
               }                   
               outFile.println();                  
           }
           outFile.close();  
       }
   }    
// end of DistributionChart tester class

我正在尝试将displayChartToFile方法写入名为outputFile.txt的文件,该文件位于CSC110文件夹中。该文件夹还包含我的bin和src文件夹。

每当我运行代码时,输​​入后前两个方法都会正确显示。

包含错误的输出示例:

Enter a series of numbers between 1 and 100. Separate each number with a space.
Signal the end by entering a number outside of that range and then press enter.
Go: 55 66 555
Distribution chart by Royce T.
================================
1-10    |
11-20   |
21-30   |
31-40   |
41-50   |
51-60   |*
61-70   |*
71-80   |
81-90   |
91-100  |
Exception in thread "main" java.io.FileNotFoundException: C:\Users\RTmag\workspaceRATI\CSC110\inputFile.txt (The system cannot find the file specified)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileReader.<init>(Unknown Source)
    at ch7.DistributionChart.getDataFromFile(DistributionChart.java:143)
    at ch7.DistributionChart.main(DistributionChart.java:28)

第28行是:

getDataFromFile(ranges);

第143行是:

Scanner inFile = new Scanner(new FileReader("C:/Users/RTmag/workspaceRATI//CSC110/inputFile.txt"));

inputFile.txt中的文字是

75 49 62 35 18 97 62 54 83 61 44 29 98 75 14

outputFile.txt为空。

非常感谢任何帮助。谢谢!

如果我没有掌握所有可能需要的信息,请告诉我!

编辑:

我修复了文件位置,但现在又返回了一组新的错误。

 Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at ch7.DistributionChart.getDataFromFile(DistributionChart.java:207)
    at ch7.DistributionChart.main(DistributionChart.java:30)

2 个答案:

答案 0 :(得分:1)

对我来说,这看起来不错......

var someArray = [1,2,3];
var value = someArray.indexOf(3) + 1 || 1;
console.log(value -= 1);

var someArray = [1,2,3];
var value = someArray.indexOf(4) + 1 || 1;
// how do we know that `4` is not at index `0`?
console.log(value -= 1);

var someArray = [1,2,3];
var value = someArray.indexOf(4) + 1 || void 0;
// we know for certain that `4` is not found in `someArray`
console.log(value, value = value || 0);
  • 您检查文件是否还有其他行
  • 您获得下一个int values = 0; while (inFile.hasNext()) { values = inFile.nextInt(); while (values > 0 && values < 101) { //... values = inFile.nextInt(); } } 值,
  • 当值介于int之间时你循环,好吧,但如果到达输入的末尾会发生什么?
  • 你读了下一个1..100啊啊,不确定。

根据您对int的输入,您可以简单地执行类似......

的操作
75 49 62 35 18 97 62 54 83 61 44 29 98 75 14

但是如果输入文件可能有多行,你可以做......

int values = 0;
while (inFile.hasNext()) {
    values = inFile.nextInt();
    //...
}

(即使它只有一行,你也可以这样做。)

基本问题是,您正在阅读文件的末尾并且int values = 0; while (inFile.hasNext()) { String nextLine = inFile.nextLine(); Scanner line = new Scanner(nextLine); while (line.hasNextInt()) { values = line.nextInt(); //... } } 已用完了要读取的数据

答案 1 :(得分:0)

更改此行

Scanner inFile = new Scanner(new FileReader("C:/Users/RTmag/workspaceRATI//CSC110/inputFile.txt"));

Scanner inFile = new Scanner(new FileReader("C:/Users/RTmag/workspaceRATI/CSC110/inputFile.txt"));

Scanner inFile = new Scanner(new FileReader("C:\\Users\\RTmag\\workspaceRATI\\CSC110\\inputFile.txt"));