簡體   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