如何在groovy

时间:2017-10-13 11:01:25

标签: java groovy apache-nifi

我想读取config.xml文件但是这个文件可以被多个处理器同时使用并且为了防止这个动作我需要使用fileLock,我通过这个代码读取xml但是格式不正确看起来像这样 我怎样才能以正确的格式阅读这个xml?:

»¿<localAttributes>
<start>2017-09-07</start>
<runAs>true</runAs>
<makeVersion>1</makeVersion>
/localAttributes>

这是我的代码(我在nifi ecmascript处理器中使用此代码p.s我不会使用像getFile等额外的处理器。):

import org.apache.commons.io.IOUtils;
import java.nio.charset.StandardCharsets;
import  java.io.RandomAccessFile;
import java.nio.channels.FileLock;
  File file = new File("C://Users//user//Desktop//try2//nifi-1.3.0//1");
        String  content=" ";
        try {
            RandomAccessFile ini = new RandomAccessFile(file, "rws");
            FileLock lock = ini.getChannel().lock();
            try {

                while (ini.read() != -1) {
                    content=+ini.readLine();
                }
            } finally {
                lock.release();
                ini.close();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        FlowFile  flowFile=session.create();
        flowFile=session.putAttribute(flowFile,"filename","conf.xml");
        session.write(flowFile, {outputStream ->
            outputStream.write(content.getBytes(StandardCharsets.UTF_8))
        } as OutputStreamCallback);
        session.transfer(flowFile,REL_SUCCESS);

1 个答案:

答案 0 :(得分:2)

您的文件以UTF-8保存,并带有可选的字节顺序标记(BOM),表明它是UTF-8。但是您使用默认的系统字符集来读取它。在您的情况下,您在Windows上执行此操作,其中默认编码为ISO-8859-1,这导致BOM被解码为两个字符。

虽然您的代码根本不像Groovy,但如果您坚持使用RandomAccessFile来读取文件,则需要使用Reader来指定编码,例如: G。

之类的东西
new BufferedReader(Channels.newReader(ini.getChannel(), "UTF-8")).readLine()