如何使用PrintStream类读取和写入文件?

时间:2018-09-13 05:21:33

标签: java

我只是试图从一个文件读取数据,然后将其写入另一个文件。但是每次我尝试使用ps.printf("%s", Filename);在“ 文件名”中打印数据时,它只会打印文件的实际名称而不是文件中的数据。

  

示例

     

输入文件名是visit.txt(由用户输入)

     

输出文件名是report.txt(由用户输入)

ps.printf("%s", Filename);会将单词“ visit.txt”打印到report.txt中,而不是打印visit.txt中的数据

PrintStream是否是从文件读取数据的错误类?

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintStream;
import java.util.Scanner;

public class Veterinary {

public static void main(String[] args) throws FileNotFoundException {
    String Filename;
    String Outputfilename;

    Scanner inputScanner = null;

    System.out.printf("Enter Your Input File Name: ");
    inputScanner = new Scanner(System.in);
    Filename = inputScanner.nextLine();

    //CREATES FILE READER
    inputScanner = new Scanner(new FileReader(Filename));
    System.out.printf("\n", Filename);

    System.out.printf("Enter Your Output File Name: ");


    PrintStream ps = null;

    inputScanner = new Scanner(System.in);
    Outputfilename = inputScanner.nextLine();

    try
    {
        ps = new PrintStream(Outputfilename);
    }
    catch (Exception e)
    {
        System.out.println("ERROR. Could not open file!");
    }

    ps.printf("%s", Filename);
  }
}

3 个答案:

答案 0 :(得分:1)

创建文件阅读器后,使用

Scanner inputScannerfile = new Scanner(new FileReader(Filename));

行而不是

inputScanner = new Scanner(new FileReader(Filename));

以及最后一行

ps.printf("%s", inputScannerfile.nextLine());

您的代码存在的问题是您扫描了输入文件,但未读取文件 在最后一行中,您在(ps.printf("%s",filename))中传递了输入文件名。这就是为什么它为您提供了输入文件名。

答案 1 :(得分:0)

PrintStream用于输出数据。如果您想阅读,那么可能可以使用InputStream。

一种方法是:

InputStream inputStream = new FileInputStream(
  new File("C:\users\Desktop\test.txt"));

byte[] buff = new byte[inputStream.available()];
inputStream.read(buff);

File target = new File("testTarget.txt");
OutputStream outStream = new FileOutputStream(target);
outStream.write(buff);

答案 2 :(得分:0)

注释行 package main import ( "github.com/jmoiron/sqlx" _ "github.com/mattn/go-sqlite3" "log" ) var db *sqlx.DB func init() { db = sqlx.MustConnect("sqlite3", ":memory:") db.Exec("CREATE TABLE agent (Id INTEGER PRIMARY KEY,);") } func main() { _, err:=db.Exec("insert into agent values (1)") if err!=nil{ log.Println(err) } } 然后将行Outputfilename = inputScanner.nextLine();替换为

ps.printf("%s", Filename);

您所犯的错是您正在将while(inputScanner.hasNextLine()){ ps.println(inputScanner.nextLine()); } 写入 printstream ,这是文件名的字符串值,而不是文件名中的内容。因为您已经打开了扫描仪进行输入文件,您需要从中读取每一行,而不是将其添加到输出文件的主输出中。以及我注释行Filename的原因;是因为它将从输入文件中读取第一行,然后转到下一行,但是我们没有将其存储到prinstream中,因此,如果您不注释该行,则输入文件中的第一行将不会被写入您的输出文件中。