将一个文件的内容复制到另一个文件时,“”转换为“’”

时间:2018-09-19 06:56:49

标签: java file file-handling

在这里,我正在尝试将一个文件的内容复制到另一个文件。内容必须完全相同,但是我有些异常。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        BufferedReader br = null;
        BufferedWriter bw =null;
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter the input file name");
        String input = scan.nextLine();
        System.out.println("Enter the output file name");
        String output = scan.nextLine();
        try {
            br = new BufferedReader(new InputStreamReader(
                    new FileInputStream(input), "UTF-8"));
            bw = new BufferedWriter(new OutputStreamWriter(
                    new FileOutputStream(output)));
            int ch = 0;
            while((ch = br.read()) != -1){
                bw.write((char)ch);
            }
        } catch (IOException e) {
        }
        finally
        {
            try {
                if(br != null && bw != null){
                br.close();
                bw.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        scan.close();
    }
}

用户必须输入输入文件名,输入文件的内容将被复制到输入的输出文件名中。

testInput.txt

  

给了自己一年的时间在柏林创办一本新杂志来拍摄   时代精神,面对着城市的文化气息   筹集必要现金的预期挑战。

testOutput.txt

  

给了自己一年的时间在柏林创办一本新杂志以捕捉   时代精神,在面对城市的同时享受城市的文化气息   筹集必要现金的预期挑战。

4 个答案:

答案 0 :(得分:1)

评论“您用什么来查看输入,用什么来查看输出?”是您应该采取的行动。

是什么使您得出结论,输出的“内容”包括那些欧元和tm符号?文本文件中的字符串也具有编码,因此您首先要考虑的是确保用于查看的工具能够正确处理该编码。

奇怪的标记之前带有â,经常使用原始工具(如记事本)查看utf-8编码的文件,该文件假定每个字符一个字节的加密机制,通常为iso-8859-1。错误不在文件中,而是在查看工具中选择。

否则:文件仅包含字节。即使它们的后缀为“ .txt”。即使这些字节代表“只是字符串”,仍然仍然会发生编码/解码,并且从创建/写入字节到查看/读取字节的链中的每个工具都必须知道使用了哪种编码。工具经常盲目地采用机器的默认编码,而在当今utf-8绝对受到欢迎的今天,这种假设通常是错误的。 (尤其是在Windows计算机上。)

答案 1 :(得分:0)

尝试 bw = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(output), StandardCharsets.UTF_8))); 因为OutputStreamWriter文档说:

  

如果您不指定一个,它只会使用默认的文件编码   默认语言环境。

答案 2 :(得分:0)

您的问题是由于字符编码引起的。

您正在使用UTF-8,但它似乎无法显示字符(即ASCII字符8217)。

因此,您可以:

  1. 将编码用作CP1252br = new BufferedReader(new InputStreamReader( new FileInputStream(input), "CP1252"));
  2. 或者使用ASCII字符39-apostrophe

答案 3 :(得分:0)

如果要按原样查看内容,则应使用不带charset参数的方法。在这种情况下,它将选择默认样式。

try {
    br = new BufferedReader(new InputStreamReader(new FileInputStream(input)));
   ...
}