0

我正在尝试完成这项任务:

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

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

    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 可以读取它?另外,新文件将在哪里创建?

我感谢您的帮助!

4

2 回答 2

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();
  }
}
于 2013-06-09T22:36:26.503 回答
0

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

于 2013-06-10T06:54:41.467 回答