`
510221952
  • 浏览: 2904 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

java 边读边写 文件迁移

 
阅读更多

package read_write;


import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.RandomAccessFile;
import java.io.Writer;
/**
 * 主要解决大文本文件的迁移过大造成的内存溢出问题,采用边读边写
 * @author zhao
 *
 */
public class Demo {

public static void main(String[] args) {
read_write("src/read_write/ChannelScanQuery.xml","src/read_write/ChannelScanQuery_write.xml");
}

/**
* 从一个文件每读取百行向第二个参数指定的目录下文件中写入一次;
* 如果第二个参数指定的目录下文件已经存在,则覆盖原文件;
* @param filename
* @param filename
* @author zhao
*/
public static void read_write(String filename,String desXMLPath){
//文件大小
    long epgSize=0;
try {
RandomAccessFile br=new RandomAccessFile(filename,"rw");//这里rw看你了。要是只读就只写r
String str = null;
//读取的行数标记、每轮读取100行
int i=0;
//读取的轮数标记
int num=0;
//每轮读取到的文本
String EPGXMLStr="";
while ((str = br.readLine()) != null) {
str = new String(str.getBytes("ISO-8859-1"),"gb2312");
i++;
EPGXMLStr=EPGXMLStr+str+"\n";
if(i>=100){//先定每轮读取100行
i=0;
num++;
System.out.println("读取到的EPG文件行数(单位:百行)"+num);


//首轮读取,保存在一个新创建的文件中
if(num==1){
           WriteFile_new(EPGXMLStr,desXMLPath);
}else{
WriteFile(EPGXMLStr,desXMLPath);
}
epgSize=epgSize+EPGXMLStr.length();
           EPGXMLStr="";
}
}
if(i>0){
epgSize=epgSize+EPGXMLStr.length();
if(num==0){
WriteFile_new(EPGXMLStr,desXMLPath);
}else{
WriteFile(EPGXMLStr,desXMLPath);
}

EPGXMLStr="";
}
br.close();
} catch (Exception e) {
System.out.println("读取到的EPG文件出错"+e.getMessage());
// TODO: handle exception
}
System.out.println("文件大小:"+epgSize);
}
/**
* 创建一个文件并向其写入一段文本
     * 写文件时转码为GB2312
     * @param StoreStr  文本
     * @param filename  地址
     * @param filename
     * @author zzb
     */
    public static void WriteFile_new(String StoreStr, String filename) {
    
    try {
        if(StoreStr == null || StoreStr.equals("")) {
        return;
        }
        
            FileOutputStream os = new FileOutputStream(filename,false);
            
            Writer out = new OutputStreamWriter(os, "GB2312");
            out.write(StoreStr);
            out.close();
            os.close();
            //log.info("文件保存成功");
        } catch (IOException ioe) {
        System.out.println("WriteFile, IOException: " + ioe
                    .getMessage());
        }
        
    }
    /**
     * 写文件时转码为GB2312
     * @param StoreStr
     * @param filename
     * @author zzb
     */
    public static void WriteFile(String StoreStr, String filename) {
    
    try {
        if(StoreStr == null || StoreStr.equals("")) {
        return;
        }
            //log.info("文件保存到:" + filename);
            FileOutputStream os = new FileOutputStream(filename,true);
            
            Writer out = new OutputStreamWriter(os, "GB2312");
            out.write(StoreStr);
            out.close();
            os.close();
            //log.info("文件保存成功");
        } catch (IOException ioe) {
        System.out.println("WriteFile, IOException: " + ioe
                    .getMessage());
        }
     
    }
}

分享到:
评论

相关推荐

    dbf-jdbc-wisecoders,JAVA 读写DBF文件工具包

    `dbf-jdbc-wisecoders`是一个Java库,它提供了对DBF文件的读写功能,使得开发者能够通过Java语言方便地操作这些文件。 这个工具包的主要特点和功能包括: 1. **JDBC接口**:`dbf-jdbc-wisecoders`通过提供一个类似...

    简单的用java实现读/写文本文件的示例

    在Java编程中,读写文本文件是常见的任务,特别是在处理数据存储、日志记录或配置文件等场景。本文将详细讲解如何使用Java实现文本文件的读取和写入操作,以及如何从一个输入流中读取内容并写入到另一个输出流中。 ...

    用JAVA将数据库导入csv程序

    本项目关注的是如何使用Java编程语言将数据库中的记录导出为CSV(Comma Separated Values)格式的文件。CSV因其通用性和易于处理的特性,被广泛应用于数据交换。 首先,让我们深入了解CSV文件格式。CSV是一种简单的...

    java代码实现文件的拷贝

    在Java编程语言中,文件的拷贝是一项常见的任务,尤其在处理数据迁移、备份或复制文件到不同位置时。Java的`java.io`包提供了一系列的流类来处理输入和输出操作,使得文件拷贝变得相对简单。在这个场景中,我们将...

    基于Java开发的数据库迁移与工具集设计源码

    在文件结构上,项目包含了32个Java源文件,这些文件是项目的核心,包含了数据库迁移工具集的主要逻辑和功能实现。6个XML配置文件则负责项目运行时的参数配置和环境设置,XML格式广泛应用于配置管理,因其良好的...

    es迁移工具,实现es数据的两个集群之间或者导出到本地进行迁移.zip

    这个压缩包文件提供了一个专门用于Elasticsearch数据迁移的工具,让我们来详细了解一下这个工具及其工作原理。 1. **Elasticsearch集群间迁移** 当你需要在两个不同的Elasticsearch集群之间迁移数据时,这个工具...

    java实现两台服务器间文件复制的方法

    客户端读取输入流中的数据,并将其写入到本地文件,直到没有更多数据可读。最后,关闭所有相关的输入/输出流和套接字。 值得注意的是,这个示例没有处理异常,实际应用中需要添加适当的错误处理代码,以确保程序的...

    Python实现读取Properties配置文件的方法

    在Python中处理`.properties`文件的这种方法简单而实用,尤其适用于需要跨平台迁移或与Java项目交互的场景。当然,如果你的项目依赖较多的配置文件操作,可能需要考虑使用更高级的库,如`configparser`(Python 3)...

    java9迁移注意问题总结

    Java 9 迁移注意问题总结 Java 9 的发布带来了许多变化,尤其是在模块系统和依赖管理方面。这篇文章总结了 Java 9 迁移的注意事项,旨在帮助开发者更好地迁移到 Java 9。 一、不可读类 在 Java 9 中,一些类被移...

    datax一次读多次写源码

    在“datax一次读多次写源码”这个主题中,我们主要关注的是DataX如何实现从一个数据源读取数据后,对这些数据进行多次写入到不同的目标数据源的能力。 在DataX的架构设计中,它通常遵循“一次读取,一次写入”的...

    用java从Oracle的EMP表读数据并写到EXCEL中,实现oracle表的备份和导入

    本示例主要关注如何利用Java语言与Oracle数据库交互,并结合Excel文件进行数据备份与导入操作。这里,我们将深入探讨涉及的知识点: 1. **Oracle数据库**:Oracle是全球领先的商业级关系型数据库管理系统,用于存储...

    java几个实用的文件操作方法.txt

    该方法接收文件路径作为参数,并输出包括文件名、是否可读、是否可写、绝对路径、父目录、文件大小等在内的详细信息。例如: ```java "Name: test.txt" "Readable: true" "Writable: false" "AbsolutePath: C:\path...

    Java7源代码

    Java 7提供了更细粒度的文件权限控制,允许开发者对特定的操作(如读、写、执行等)进行授权。 7. **改进的数组初始化** 现在可以在数组声明时直接初始化,例如:`int[] array = {1, 2, 3};` 8. **集合接口的...

    Java 实例 - 将文件内容复制到另一个文件源代码-详细教程.zip

    在Java编程中,将文件内容从一个文件复制到另一个文件是一项常见的操作,这对于备份、迁移或者处理大量数据时尤其有用。本教程将深入探讨如何在Java中实现这一功能,通过详细的源代码实例来帮助理解。 首先,我们...

    java源码查看工具

    首先,我们要明确的是,Java源码查看工具的主要功能是对Java字节码进行反编译,将其转化为人类可读的源代码形式。由于Java的编译过程会将源代码编译为字节码(.class文件),而这些字节码文件并不直接包含源代码信息...

    Java利用文件输入输出流实现文件夹内所有文件拷贝到另一个文件夹

    Java实现文件夹内所有文件拷贝到另一个文件夹 Java语言提供了多种方式来实现文件夹内所有文件拷贝到另一个文件夹,本文将介绍使用文件输入输出流实现文件夹内所有文件拷贝到另一个文件夹的方法。 一、基本目标 ...

    基于Java语言开发的GIS应用设计源码

    XML文件的结构化特性使得配置更加清晰、易于管理,同时也方便在不同的环境间迁移和部署。 项目中的Markdown文件有2个,通常用于编写项目的说明文档和开发指南。Markdown作为一种轻量级标记语言,以其简洁易读而受到...

    jar文件管理器 模拟文件管理

    5. **权限管理**:虽然Java标准库没有提供直接的文件权限管理功能,但在模拟文件管理中,可以模拟实现简单的访问控制,例如读、写和执行权限。 6. **用户交互**:良好的用户体验是关键,因此,该系统会使用Java ...

    强大的java反编译工具

    "class转java"是指将Java字节码文件转换成可读的Java源代码文件。这个过程通常涉及到解析Java虚拟机(JVM)的字节码格式,解码指令,然后重构出接近原始源代码的表示。 在实际应用中,Java反编译工具有以下用途: ...

    datax支持读取parquet格式文件,支持写入parquet格式文件,修复读取orc读取数据丢失问题

    新增的对Parquet格式的读取和写入支持意味着DataX现在可以更好地融入大数据工作流程,将数据高效地从一个Parquet文件系统迁移到另一个,或者从其他数据源导入到Parquet,为数据分析和处理提供便利。 其次,提到的...

Global site tag (gtag.js) - Google Analytics