java - 如何从文件中读取文本(文本语言不固定)并执行某些操作将其写入另一个文件中?

标签 java

我有一个用孟加拉语、英语、印地语等编写的文本文件。我想阅读该文件。然后我想对这个字符串执行一些操作。最后,我将把生成的字符串写入另一个文件中。

我尝试过,但没有解决我的问题。那么,我应该怎么做才能解决我的问题呢?

BufferedReader read = new BufferedReader(
    new InputStreamReader(
        new FileInputStream  ("Input1.txt"), StandardCharsets.UTF_8) );
Writer writeFirst = new BufferedWriter(
    new OutputStreamWriter(
        new FileOutputStream("Input.txt",true), StandardCharsets.UTF_16));
String str =null ;
while ((str = read.readLine()) != null) {
     String[] words = str.split(" ");
     // will do some operation on those strings
     for(String u : words) {
         writeFirst.write(u + "     ") ;
      }
      writeFirst.write("\n") ;
}

输入:

i love my country
আমি আমার দেশকে ভালোবাসি 

我得到的输出:

��I       l o v e       m y       c o u n t r y      
��I       l o v e       m y       c o u n t r y      
��I       l o v e       m y       c o u n t r y      
��I       l o v e       m y       c o u n t r y      
��I       l o v e       m y       c o u n t r y      
��I       l o v e       m y       c o u n t r y      
��I       l o v e       m y       c o u n t r y      
��I      l o v e      m y      c o u n t r y     
��i      l o v e      m y      c o u n t r y     
��i   l o v e   m y   c o u n t r y ��i   l o v e   m y   c o u n t r y ��i   l o v e   m y   c o u n t r y ��i   l o v e   m y   c o u n t r y   � �   �     � �   �   �     � �   �   �   �     � �   �   �   �   �   �   �     

最佳答案

你的代码基本上可以工作。如果您必须使用 UTF-16,我建议将输出文件的编码从 UTF-16 显式更改为 UTF-16BE

我稍微改进了资源使用:

public static void main(String args[]) {
    try (InputStream is = new FileInputStream(Paths.get(args[0]).toFile());
            Reader reader = new InputStreamReader(is, StandardCharsets.UTF_8);
            BufferedReader in = new BufferedReader(reader);
            OutputStream os = new FileOutputStream(Paths.get(args[1]).toFile(), true);
            Writer writer = new OutputStreamWriter(os, StandardCharsets.UTF_16BE);
            BufferedWriter out = new BufferedWriter(writer)) {
        String line;
        while ((line = in.readLine()) != null) {
            String[] words = line.split(" ");
            System.out.println(
                    String.format("writing line '%s' which has %d words",
                            line, words.length));
            // will do some operation on those strings
            for (String word : words) {
                out.write(word + "     ");
            }
            out.write("\n");
        }
    } catch (IOException ex) {
        System.err.println(ex.getMessage());
    }
}

生成的文件(在 args[1] 上给出)已正确编码。这可以使用 iconv 进行验证将其转换为 UTF-8:

$ iconv -f UTF16BE -t UTF8 output.UTF16BE.txt
i     love     my     country     
আমি     আমার     দেশকে     ভালোবাসি 

如您所见,内容是正确的,并且包含单词之间添加的空格。

关于java - 如何从文件中读取文本(文本语言不固定)并执行某些操作将其写入另一个文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51303289/

相关文章:

java - 递归程序中的错误

java - OSX 中出现 NoSuchMethodError,但 Ubuntu 中没有

java - 如何使用文本文件中的 PrinterWriter 类获得以下结果?

java - 想要在 edittext fragment 中添加验证

java - 订单上的 Objectify DatastoreNeedIndexException 错误

java - Android:访问 Fragment 类中的 View 对象

java - 返回包含多个变量的字符串的方法

java - 如何在 MacOSX 上处理 R 代码中的 Java 错误?

java - 将字符串资源 ID 数组与 ListAdapter 一起使用吗?

java - 如何通过自引用处理实体的 RESTful 响应