在Java Error中读取/写入文件

时间:2013-06-09 22:34:01

标签: java input io output filereader

我正在尝试执行此任务:

编写一个读取文件的程序,并将该文件的副本写入另一个插入行号的文件中。

到目前为止,我已经写了很多代码:

    import java.io.*;
import java.util.Scanner;

public class Question43 
{
public static void main(String[] args) throws IOException
{
    Scanner fileIn = new Scanner(new File("Assign4.txt") );


    FileWriter fileOut = new FileWriter("FileOut.txt");
    PrintWriter output = new PrintWriter(fileOut);

    String []array = new String[10];

    int indx = 0;
    while(fileIn.hasNext( ) )
    {
        array[indx] = fileIn.nextLine( );
    }

    fileIn.close();

    int num = 1;
    for(int i =0; i < array.length; i++)
    {
        output.println(num+"\t"+array[i]);
    }
}
}

当我点击运行时,我收到此错误:

Exception in thread "main" java.io.FileNotFoundException: Assign4.txt (The system cannot find the file specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.util.Scanner.<init>(Unknown Source)
    at Question43.main(Question43.java:8)

有人可以告诉我该怎么办?我应该在哪里放置名为Assign4的文本文件,以便Eclipse IDE可以读取它?此外,新文件将在何处创建?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

在Eclipse中,程序从顶级目录运行,即源文件夹和bin文件夹所在的位置。如果有疑问,请尝试

   System.out.println((new java.io.File(".")).getAbsolutePath());

将打印出运行该程序的目录的路径。

你还需要记得在使用它之后关闭你的编写器,以确保你写的内容被刷新 - 编写器可能缓冲你写的内容,如果你的程序在刷新缓冲区之前完成,那么你写的是什么迷路了。所以在程序结束时关闭你的作家,即

import java.io.*;
import java.util.Scanner;

public class Question43 
{
  public static void main(String[] args) throws IOException
  {
    Scanner fileIn = new Scanner(new File("Assign4.txt") );


    FileWriter fileOut = new FileWriter("FileOut.txt");
    PrintWriter output = new PrintWriter(fileOut);

    String []array = new String[10];

    int indx = 0;
    while(fileIn.hasNext( ) )
    {
        array[indx] = fileIn.nextLine( );
    }

    fileIn.close();

    int num = 1;
    for(int i =0; i < array.length; i++)
    {
        output.println(num+"\t"+array[i]);
    }
    output.close();
  }
}

另一条评论 - 你假设你的文件正好有10行。为了更灵活地尝试使用按需增长的数据结构,例如ArrayList。此外,您似乎没有在循环中递增num - 因此您的行将全部编号为1。

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

public class Question43 
{
  public static void main(String[] args) throws IOException
  {
    Scanner fileIn = new Scanner(new File("Assign4.txt") );


    FileWriter fileOut = new FileWriter("FileOut.txt");
    PrintWriter output = new PrintWriter(fileOut);

    List<String> list = new ArrayList<String>();

    while(fileIn.hasNext( ) )
    {
        list.add(fileIn.nextLine( ));
    }

    fileIn.close();

    int num = 1;
    for(String line : list)
    {
        output.println(num+"\t"+line);
        num++;
    }
    output.close();
  }
}

最后,您根本不需要数据结构,因为您可以在读取输入文件时写入输出文件,即

import java.io.*;
import java.util.Scanner;

public class Question43 
{
  public static void main(String[] args) throws IOException
  {
    Scanner fileIn = new Scanner(new File("Assign4.txt") );


    FileWriter fileOut = new FileWriter("FileOut.txt");
    PrintWriter output = new PrintWriter(fileOut);

    int num = 1;
    while(fileIn.hasNext( ) )
    {
        String line = fileIn.nextLine( );
        output.println(num+"\t"+line);
        num++;
    }

    fileIn.close();
    output.close();
  }
}

答案 1 :(得分:0)

请指定Assign4.txt文件的路径。扫描仪无法找到您指定的路径。指定项目根目录的路径