`

JAVA读写文件小实例

阅读更多

        测试同事在测试时,需要测试一些比较特殊的场景,需要往第三方的文件中新增数据,而第三方文件内容是以特殊的\u0001做为分隔符的,用普通的文本编辑工具打开是乱码。因此,特写了一个文件操作的小程序给测试同事。

        小程序功能:往第三方文件中新增数据,新增的数据是以“|”分隔的。当然,对readDataFromFile方法稍加修改,也可以从文件中读取数据。

FileUtils.java

package com.bijian.tools;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;

import com.google.common.base.Splitter;
import com.google.common.io.Closeables;

public class FileUtils {
    
    private final static String CHARACTER_ENCODING_UTF_8 = "UTF-8";
    private final static String SPLIT_CHAR = "\u0001";
    private final static String LOCAL_SPLIT_CHAR = "|";
    
    private final static String FILE_NAME_WITH_PATH = "D:\\data\\files\\test.txt";
    
    public static void main(String[] args) {
        
        List<String> data = new ArrayList<String>();
        data.add("123456789|201|301|20170124|153401");
        data.add("222222222|202|302|20170124|153501");
        
        List<DataDto> dataList = new ArrayList<DataDto>();
        
        for(String line : data) {
            parseLineAndAdd(line, dataList);
        }
        generateCompareFile(FILE_NAME_WITH_PATH, dataList);
    }

    /**
     * 从文件中读取数据
     * @return
     */
    private static List<DataDto> readDataFromFile() {
        
        List<DataDto> dataList = new ArrayList<DataDto>();
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new InputStreamReader(new FileInputStream(FILE_NAME_WITH_PATH)));
            String lineStr;
            while ((lineStr = reader.readLine()) != null) {
                parseLineAndAdd(lineStr, dataList);
            }
        }catch(Exception e) {
            System.err.println("读取文件出错," + e);
        }finally {
            try {
                if(reader != null) {
                    Closeables.close(reader, false);
                }
            } catch (IOException e) {
                    reader = null;
            } finally {
                    reader = null;
            }
        }
        return dataList;
    }
    
    private static void parseLineAndAdd(String line, List<DataDto> dataList) {
        
        List<String> lineData = Splitter.on(LOCAL_SPLIT_CHAR).splitToList(line);
        if (CollectionUtils.isNotEmpty(lineData)) {

            DataDto data = new DataDto();
            
            data.setId(lineData.get(0));
            data.setbCode(lineData.get(1));
            data.setcCode(lineData.get(2));
            data.setDate(lineData.get(3));
            data.setTime(lineData.get(4));

            dataList.add(data);
        }
    }
    
    /**
     * 根据指定的文件全路径创建空白文件
     */
    public static void createNewFile(String fileName) {
        String dir = fileName.substring(0, fileName.lastIndexOf(File.separator));
        File dirs = new File(dir);
        if (!dirs.exists()) {
            dirs.mkdirs();
        }

        if (!dirs.mkdirs() && !dirs.isDirectory()) {
            System.out.println((new StringBuilder("Unable to create directory ")).append(dirs).toString());
        }

        File file = new File(fileName);
        try {
            if(file.exists()){
                file.delete();
            }
            file.createNewFile();
        } catch (IOException e) {
            System.out.println(new StringBuffer("Create File ").append(fileName).append(" happen error,reason:").append(e.toString()).toString());
        }
    }
    
    private static void generateCompareFile(String fileName, List<DataDto> dataList) {

        BufferedWriter bufferedWriter = null;
        try {
            bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName, true),
                    CHARACTER_ENCODING_UTF_8));
            System.out.println("文件写入开始");
            if (!(CollectionUtils.isEmpty(dataList))) {
                for (DataDto temp : dataList) {
                    writeCoreCompareFileToWriter(bufferedWriter, temp);
                }
            } else {
                System.out.println("无数据写入");
            }
            System.out.println("文件写入结束");
        } catch (Exception e) {
            System.err.println("文件写入过程出现异常:" + e);
        } finally {
            try {
                Closeables.close(bufferedWriter, false);
            } catch (IOException e) {
                System.err.println("关闭IO流失败" + e);
            } finally {
                bufferedWriter = null;
            }
        }
    }
    
    private static void writeCoreCompareFileToWriter(BufferedWriter bufferedWriter, DataDto data)
            throws Exception {
        
        StringBuilder line = new StringBuilder();
        
        line.append(StringUtils.defaultIfEmpty(data.getId(), "")).append(SPLIT_CHAR)
            .append(StringUtils.defaultIfEmpty(data.getbCode(), "")).append(SPLIT_CHAR)
            .append(StringUtils.defaultIfEmpty(data.getcCode(), "")).append(SPLIT_CHAR)
            .append(StringUtils.defaultIfEmpty(data.getDate(), "")).append(SPLIT_CHAR)
            .append(StringUtils.defaultIfEmpty(data.getTime(), "")).append(SPLIT_CHAR);
        
        bufferedWriter.write(line.toString());
        bufferedWriter.write("\n");
    }
}

DataDto.java

package com.bijian.tools;

public class DataDto {
    
    private String id;

    private String bCode;

    private String cCode;

    private String date;

    private String time;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getbCode() {
        return bCode;
    }

    public void setbCode(String bCode) {
        this.bCode = bCode;
    }

    public String getcCode() {
        return cCode;
    }

    public void setcCode(String cCode) {
        this.cCode = cCode;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }
}
分享到:
评论

相关推荐

    java读取本地.db文件实例

    在Java编程中,读取本地SQLite数据库(.db文件)是一项常见的任务,特别是在移动应用开发或者需要离线存储数据的场景下。SQLite是一种轻量级的、开源的关系型数据库,它不需要单独的服务器进程,可以直接在应用程序...

    java读取配置文件的实例代码

    返回的是一个`InputStream`对象,你可以通过它来读取文件内容。 配置文件通常使用`.properties`格式,这是一种键值对的文本格式,用于存储配置信息。在Java中,我们可以使用`java.util.Properties`类来处理这类文件...

    java如何读取文件

    在Java编程语言中,读取文件是一项常见的操作,尤其是在处理数据、日志文件或配置信息时。本文将详细解析如何使用Java读取文本文件,基于提供的代码示例,深入探讨其工作原理及最佳实践。 ### Java读取文本文件的...

    java读写文件实例

    读取文件同样依赖于流的概念,`FileInputStream`类用于从文件中读取字节。代码示例如下: 1. 创建一个指向文件的`FileInputStream`对象,即`FileInputStream in = new FileInputStream(f);`。 2. 准备一个字节数组`...

    JAVA文件加密打包实例

    - 加密文件:读取文件内容,使用`cipher.doFinal()`方法加密数据。 - 写入加密后的数据到新文件。 2. **非对称加密**:如RSA,使用公钥加密,私钥解密。这里涉及到`KeyPairGenerator`生成公钥和私钥对,然后用...

    用java读取ini文件(支持中文)

    1. **读取文件**:首先,`IniReader`类会使用`BufferedReader`或其他文件流API打开并读取INI文件内容。 2. **处理编码**:为了正确处理中文字符,`IniReader`可能使用`InputStreamReader`,并指定UTF-8或其他合适的...

    java 随机读写Java类文件

    3. **读取Java类文件**:要读取类文件,首先创建`RandomAccessFile`实例,然后使用`seek()`方法定位到文件的特定位置。接着,通过`read()`或`readByte()`方法读取数据。对于类文件,通常会读取字节并转换为对应的类...

    Java保存与读取文件.rar

    Java保存与读取文件代码示例,super("存储与读取对象"); //调用父类构造函数  Container container=getContentPane(); //得到容器  Icon imageIcon=new ImageIcon("image.gif"); //实例化一个图标  ...

    nc文件读写 java版本

    Java版本的NetCDF库使得开发者能够在Java环境中方便地进行NetCDF文件的读取和写入操作。 1. **NetCDF简介** - NetCDF是一种通用的数据模型,不仅定义了数据结构,还包含了元数据,用于描述数据的含义和布局。 - ...

    java读取属性文件

    在本教程中,我们将深入探讨如何在Java中读取属性文件,并结合日志记录进行操作。 首先,我们需要了解如何创建一个简单的属性文件。例如,我们创建一个名为`config.properties`的文件,内容如下: ``` database....

    Java socket文件传输实例

    在这个"Java socket文件传输实例"中,我们将深入探讨如何使用Java的Socket类进行文件的发送和接收,这对于理解网络编程的基本原理以及在实际应用中构建文件共享系统至关重要。 首先,Java Socket是基于TCP/IP协议的...

    java读取Excel的实例

    在Java编程中,读取Excel文件是一项常见的任务,特别是在数据处理和分析的场景下。Excel文件通常用于存储结构化的表格数据,而Java提供了一些库,如Apache POI,可以帮助我们轻松地读取和操作这些文件。Apache POI是...

    java学习小实例

    "Java学习小实例"是针对初学者和有一定基础的学习者设计的一系列教程,旨在通过具体的代码示例帮助理解Java的基础概念和技术。这个压缩包可能包含了各种各样的Java编程练习和例子,涵盖了从基本语法到进阶主题的多个...

    java读取文件内容

    // 读取文件并添加到列表 Collections.sort(stus); ``` #### 3.2 自定义对象排序 本例中自定义了`Student`类,并实现了`Comparable`接口,以便于列表排序。 示例代码: ```java private static class Student ...

    Android 读写文件实例

    在Android平台上,对文件进行读写操作是应用程序中常见的需求,比如存储用户数据、缓存信息或者媒体资源。本文将详细讲解如何在Android系统中进行SD卡和内部存储的读写,以及如何获取文件目录。 ### 1. Android权限...

    Java 读取PDF文件

    在Java编程环境中,读取PDF文件是一项常见的任务,特别是在开发桌面应用或需要处理PDF文档内容时。本篇文章将深入探讨如何使用Java来读取PDF文件,并将其内容展示在一个由JFrame和JPanel构建的GUI窗口中。 首先,...

    Java文件上传下载实例(含详细注释)

    - 将`Part`对象转换为`InputStream`,读取文件内容。 - 在服务器上选择一个保存位置,创建目标文件并写入数据。 - 处理可能出现的异常,如文件大小限制、文件类型检查等。 5. **文件下载步骤**: - 用户请求...

    Java读取文件方法大全

    Java语言在处理文件I/O操作时提供了多种方法,这些方法可以按照不同的策略读取文件,例如按字节或字符进行。下面将详细讲解Java中读取文件的主要方法,并结合给出的代码片段进行分析。 首先,Java中最基础的文件...

    java读写xml文件

    ### Java读写XML文件知识点详解 #### 一、概述 在Java编程中,对XML文件进行读取与写入是一项非常常见的任务。XML(可扩展标记语言)是一种用于标记数据的语言,非常适合用来存储和传输数据。Java提供了多种API来...

Global site tag (gtag.js) - Google Analytics