AE86 %!s(int64=3) %!d(string=hai) anos
pai
achega
eb50a5acd5

+ 11 - 25
dbsyncer-connector/src/main/java/org/dbsyncer/connector/file/FileConnector.java

@@ -21,14 +21,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.util.Assert;
 
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
+import java.io.*;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
-import java.nio.ByteBuffer;
-import java.nio.channels.FileChannel;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.stream.Collectors;
@@ -48,11 +43,7 @@ public final class FileConnector extends AbstractConnector implements Connector<
 
     @Override
     public ConnectorMapper connect(FileConfig config) {
-        try {
-            return new FileConnectorMapper(config);
-        } catch (FileNotFoundException e) {
-            throw new ConnectorException(e.getCause());
-        }
+        return new FileConnectorMapper(config);
     }
 
     @Override
@@ -167,30 +158,25 @@ public final class FileConnector extends AbstractConnector implements Connector<
         final String separator = new String(new char[] {connectorMapper.getConfig().getSeparator()});
 
         Result result = new Result();
-        FileChannel fileChannel = null;
+        OutputStream output = null;
         try {
-            fileChannel = connectorMapper.getFileChannel(config.getCommand().get(FILE_NAME));
-            for (Map row: data) {
+            final String filePath = connectorMapper.getFilePath(config.getCommand().get(FILE_NAME));
+            output = new FileOutputStream(filePath, true);
+            List<String> lines = data.stream().map(row -> {
                 List<String> array = new ArrayList<>();
                 fields.forEach(field -> {
                     Object o = row.get(field.getName());
                     array.add(null != o ? String.valueOf(o) : "");
                 });
-                String join = StringUtil.join(array.toArray(), separator).concat("\n");
-                fileChannel.write(ByteBuffer.wrap(join.getBytes()));
-            }
+                return StringUtil.join(array.toArray(), separator);
+            }).collect(Collectors.toList());
+            IOUtils.writeLines(lines, null, output, "UTF-8");
         } catch (Exception e) {
             result.addFailData(data);
             result.getError().append(e.getMessage()).append(System.lineSeparator());
             logger.error(e.getMessage());
-        }finally {
-            if(null != fileChannel){
-                try {
-                    fileChannel.close();
-                } catch (IOException e) {
-                    logger.error(e.getMessage());
-                }
-            }
+        } finally {
+            IOUtils.closeQuietly(output);
         }
         return result;
     }

+ 3 - 31
dbsyncer-connector/src/main/java/org/dbsyncer/connector/file/FileConnectorMapper.java

@@ -5,15 +5,9 @@ import org.dbsyncer.connector.ConnectorMapper;
 import org.dbsyncer.connector.config.FileConfig;
 import org.dbsyncer.connector.model.Field;
 import org.dbsyncer.connector.model.FileSchema;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.util.Assert;
 
 import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.nio.channels.FileChannel;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -25,13 +19,11 @@ import java.util.concurrent.ConcurrentHashMap;
  */
 public final class FileConnectorMapper implements ConnectorMapper<FileConfig, String> {
 
-    private final Logger logger = LoggerFactory.getLogger(getClass());
-
     private FileConfig config;
     private List<FileSchema> fileSchemaList;
     private Map<String, FileResolver> fileSchemaMap = new ConcurrentHashMap<>();
 
-    public FileConnectorMapper(FileConfig config) throws FileNotFoundException {
+    public FileConnectorMapper(FileConfig config) {
         this.config = config;
         fileSchemaList = JsonUtil.jsonToArray(config.getSchema(), FileSchema.class);
         Assert.notEmpty(fileSchemaList, "The schema is empty.");
@@ -56,7 +48,7 @@ public final class FileConnectorMapper implements ConnectorMapper<FileConfig, St
 
     @Override
     public void close() {
-        fileSchemaMap.values().forEach(fileResolver -> fileResolver.close());
+        fileSchemaMap.clear();
     }
 
     public List<FileSchema> getFileSchemaList() {
@@ -69,12 +61,6 @@ public final class FileConnectorMapper implements ConnectorMapper<FileConfig, St
         return fileResolver.fileSchema;
     }
 
-    public FileChannel getFileChannel(String tableName) {
-        FileResolver fileResolver = fileSchemaMap.get(tableName);
-        Assert.notNull(fileResolver, String.format("can not find fileSchema by tableName '%s'", tableName));
-        return fileResolver.raf.getChannel();
-    }
-
     public String getFilePath(String tableName) {
         FileResolver fileResolver = fileSchemaMap.get(tableName);
         Assert.notNull(fileResolver, String.format("can not find fileSchema by tableName '%s'", tableName));
@@ -82,28 +68,14 @@ public final class FileConnectorMapper implements ConnectorMapper<FileConfig, St
     }
 
     class FileResolver {
-
         FileSchema fileSchema;
-        RandomAccessFile raf;
         String filePath;
 
-        public FileResolver(FileSchema fileSchema) throws FileNotFoundException {
+        public FileResolver(FileSchema fileSchema) {
             this.fileSchema = fileSchema;
             this.filePath = config.getFileDir().concat(fileSchema.getFileName());
             File file = new File(filePath);
             Assert.isTrue(file.exists(), String.format("found not file '%s'", filePath));
-            this.raf = new RandomAccessFile(file, "rw");
         }
-
-        public void close(){
-            if(null != raf){
-                try {
-                    raf.close();
-                } catch (IOException e) {
-                    logger.error(e.getMessage());
-                }
-            }
-        }
-
     }
 }