繁体   English   中英

用Java错误读取/写入文件

[英]Reading/Writing a file in Java Error

我正在尝试执行此任务:

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

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

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

我感谢您的帮助!

在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();
  }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM