`
cyril0513
  • 浏览: 15756 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

读取ZIP文件

 
阅读更多

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;


import java.util.Timer;
import java.util.TimerTask;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;

import com.expedia.e3.platform.foundation.core.beans.IInitializingBean;
import com.expedia.e3.platform.foundation.core.configuration.frontend.ISettingFamily;
import com.expedia.e3.platform.foundation.core.logging.EventLogEntry;

/**
* Timer task that fetches the mapping data and updates ecom to hcom and hcom to ecom mapping
*
* @author <a href="mailto:pkotteprakasam@expedia.com">Prashanth</a>
*
*/
public class HotelIdMapper extends TimerTask implements IHotelIdMapper, IInitializingBean
{
private static final String ZIP_FILE_ENTRY_NAME_SETTING = "zipFileEntryName";
private static final String ZIP_FILE_NAME_SETTING = "zipFileName";
private static final String ENTRY_ELEMENT = "Entry";
private static final String HCOM_ID_ATTRIBUTE = "hcomId";
private static final String EXPEDIA_ID_ATTRIBUTE = "expediaId";
private static final String HOTEL_ID_MAPPING_UPDATE_INTERVAL = "updateMillis";
private static final Logger LOGGER = Logger.getLogger(HotelIdMapper.class);

private Map<Integer, Integer> m_eComToHComHotelIdMap = new HashMap<Integer, Integer>();
private Map<Integer, Integer> m_hComToEComHotelIdMap = new HashMap<Integer, Integer>();

private ISettingFamily m_settingFamily;

/**
* maps an e.com hotel id to an h.com hotelid
* @param eComHotelId
* @return corresponding h.com id. null if none is found
*/
public Integer getHComHotelId(int eComHotelId)
{
if (eComHotelId <= 0 || !m_eComToHComHotelIdMap.containsKey(eComHotelId))
{
return null;
}
else
{
return m_eComToHComHotelIdMap.get(eComHotelId);
}
}

/**
* maps an c.com hotel id to an e.com hotel id
* @param hComHotelId
* @return corresponding e.com id. null if none is found
*/
public Integer getEComHotelId(int hComHotelId)
{
if (hComHotelId <= 0 || !m_hComToEComHotelIdMap.containsKey(hComHotelId))
{
return null;
}
else
{
return m_hComToEComHotelIdMap.get(hComHotelId);
}
}

/**
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
*/
public void afterPropertiesSet() throws Exception
{
run();

Timer timer = new Timer();
long period = m_settingFamily.getLong(HOTEL_ID_MAPPING_UPDATE_INTERVAL);
timer.schedule(this, period, period);
}

/**
* Setter of setting family
*
* @param settingFamily
*/
public void setSettingFamily(ISettingFamily settingFamily)
{
m_settingFamily = settingFamily;
}

@Override
public void run()
{
try
{

String zipFileName = m_settingFamily.getString(ZIP_FILE_NAME_SETTING);
String zipFileEntryName = m_settingFamily.getString(ZIP_FILE_ENTRY_NAME_SETTING);

updateMappingFromZipFile(zipFileName, zipFileEntryName);    
}
catch (IOException ioe)
{
EventLogEntry.logEvent(LOGGER, Level.ERROR, EventLogIds.HOTELID_MAPPING_UNAVAILABLE,
ErrorMessage.HOTEL_ID_MAPPING_FAILURE, ioe);
}
catch (XMLStreamException xse)
{
EventLogEntry.logEvent(LOGGER, Level.ERROR, EventLogIds.HOTELID_MAPPING_UNAVAILABLE,
ErrorMessage.HOTEL_ID_MAPPING_FAILURE, xse);
}
}

private void updateMappingFromZipFile(String zipFilePath, String zipEntryName)
throws IOException, XMLStreamException
{
Map<Integer, Integer> newEToHComHotelIdMap = new HashMap<Integer, Integer>();
Map<Integer, Integer> newHToEComHotelIdMap = new HashMap<Integer, Integer>();

ZipFile zipFile = new ZipFile(zipFilePath);
ZipEntry zipEntry = zipFile.getEntry(zipEntryName);
if(zipEntry != null)
{
try
{
InputStream inputStream = zipFile.getInputStream(zipEntry);
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
    XMLStreamReader  xmlStreamReader = inputFactory.createXMLStreamReader(inputStream);

    int expediaId = 0;
    int hcomId = 0;

    //stream the xml file and create ecom-hcom mappings
while (xmlStreamReader.hasNext())
{
int event = xmlStreamReader.next();
if (event == XMLStreamConstants.START_ELEMENT
&& xmlStreamReader.getLocalName().equals(ENTRY_ELEMENT))
{
String attrValueExpediaId = null;
String attrValueHcomId = null;
try
{
attrValueExpediaId = xmlStreamReader.getAttributeValue(null, EXPEDIA_ID_ATTRIBUTE);
attrValueHcomId = xmlStreamReader.getAttributeValue(null, HCOM_ID_ATTRIBUTE);
if(attrValueExpediaId != null && attrValueHcomId != null)
{
expediaId = Integer.parseInt(attrValueExpediaId);
hcomId = Integer.parseInt(attrValueHcomId);
newEToHComHotelIdMap.put(expediaId, hcomId);
newHToEComHotelIdMap.put(hcomId, expediaId);
}
else
{
EventLogEntry.logEvent(LOGGER, Level.ERROR,
EventLogIds.HOTELID_INVALID_MAPPING_ENTRIES_ID,
String.format(ErrorMessage.ERROR_INVALID_HOTEL_ID,
attrValueExpediaId, attrValueHcomId));
}
}
catch (NumberFormatException nfe)
{
EventLogEntry.logEvent(LOGGER, Level.ERROR,
EventLogIds.HOTELID_INVALID_MAPPING_ENTRIES_ID,
String.format(ErrorMessage.ERROR_INVALID_HOTEL_ID,
attrValueExpediaId, attrValueHcomId));
}
}
}
m_eComToHComHotelIdMap = newEToHComHotelIdMap;
m_hComToEComHotelIdMap = newHToEComHotelIdMap;
EventLogEntry.logEvent(LOGGER, Level.INFO, EventLogIds.HOTEL_ID_MAP_SUCCESS,
ErrorMessage.HOTEL_ID_MAPPING_SUCCESS);
}
finally
{
zipFile.close();
}
}
}
}
分享到:
评论

相关推荐

    详解Java无需解压直接读取Zip文件和文件内容

    "Java读取Zip文件和文件内容" Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面...

    编程方式读写ZIP文件(C++).rar

    本文将详细探讨如何在C++中以编程方式读写ZIP文件。 首先,你需要一个库来处理ZIP文件,因为C++标准库并不直接支持ZIP操作。一种常用的库是libzip,它提供了读取、创建、修改和删除ZIP文件的功能。安装libzip后,你...

    java读取zip文件

    在Java编程环境中,读取ZIP文件是一项常见的任务,特别是在处理归档数据或打包资源时。以下将详细讲解如何使用Java来实现这一功能。 首先,Java提供了`java.util.zip`包,该包包含了处理ZIP文件所需的类,如`...

    读取zip文件,不解压缩直接解析,支持文件名中文,解决内容乱码(还是以支付宝对账单为例)

    在读取ZIP文件时,我们首先需要打开ZIP文件并创建一个ZIP文件对象。然后,通过迭代这个对象,我们可以访问每个条目(即压缩的文件或目录),获取其文件名和内容。关键在于正确处理文件名的编码。在某些情况下,...

    C++编程的方式读写ZIP文件,基于ZipLib封装的库

    本文将深入探讨如何利用ZipLib库在C++中进行ZIP文件的读写操作。ZipLib是一个用C编写的库,用于处理ZIP档案,而我们的任务是通过在C++中对其进行封装,以便更方便地进行压缩和解压缩。 首先,我们需要理解ZIP文件...

    Flex Air压缩和读取zip文件

    Flex Air压缩和读取zip文件是一项在开发过程中经常会遇到的任务,尤其在处理大量数据或文件传输时。这个主题主要涉及到Flex、Adobe AIR以及ZipArchive库的使用。让我们深入了解一下这些概念和技术。 首先,Flex是一...

    delphi解压ZIP文件

    - 调用 `ReadZip` 方法来读取ZIP文件的信息。 - ```pascal VCLUnZip1.ReadZip; ``` 5. **设置解压目标目录:** - 使用 `DestDir` 属性指定解压后文件的目标目录。 - ```pascal VCLUnZip1.DestDir := desPath...

    递归读取zip文件及其子文件结构

    `递归读取zip文件及其子文件结构`这个标题指的是一个功能强大的工具类,它能够帮助开发者遍历并访问ZIP文件内的所有文件和子目录,包括嵌套的ZIP文件。这个Java工具类设计得易于使用,可以直接集成到项目中,为处理...

    在Symbian OS中读取ZIP文件

    CzipFile类提供了读取和操作ZIP文件的功能,允许开发者在应用程序中解压和访问ZIP文件内的内容。 1. **打开ZIP文件** 要读取ZIP文件,首先需要创建CzipFile对象。这通常通过两阶段构造函数完成,传入文件服务器...

    使用Zlib完成取ZIP压缩包中文件

    Zlib库通过其贡献模块minizip提供了对ZIP文件的读写支持。 描述中提到,这个项目是基于Zlib库1.2.3版本的Contrib子目录下的minizip程序。minizip是一个简单的接口,允许开发者用C语言编写应用程序来操作ZIP文件。...

    js解压读取zip文件

    `zip.js`是一个轻量级的库,它提供了在浏览器环境中读取、创建和操作ZIP文件的功能。本篇文章将深入探讨如何使用`zip.js`来解压并读取ZIP文件。 首先,为了使用`zip.js`,你需要将其引入到你的项目中。如果你使用的...

    JSZip使用Javascript创建读取和编辑zip文件

    JSZip是一款纯JavaScript编写的库,它允许开发者在浏览器端创建、读取和编辑ZIP文件。这个库的强大之处在于,无需任何服务器端支持,就可以在客户端处理ZIP文件,这对于前端开发者来说是一个非常实用的工具。下面...

    ZIP文件损坏修复

    5. **电源故障**:在读写ZIP文件的过程中突然断电,可能会造成文件系统错误,导致ZIP文件损坏。 **检测ZIP文件损坏的方法** 1. **尝试解压**:最简单的方法是尝试用常用的压缩软件(如WinRAR、7-Zip)进行解压。...

    poi.zip java读取excel文件

    Java 读取 Excel 文件是许多开发任务中的常见需求,Apache POI 是一个广泛使用的开源库,专门用于处理 Microsoft Office 格式的文件,包括 Excel。在本案例中,提供的压缩包 "poi.zip" 包含了两个子文件:poi-bin-...

    解压zip文件,读取zip文件中的详细信息程序代码

    本文将深入探讨如何解压ZIP文件并读取其中的详细信息,包括文件名、日期时间戳、文件大小等。我们将通过一个名为`unzip.c`的C语言源码来讲解这一过程。 首先,我们需要了解ZIP文件格式。ZIP是一种容器格式,它将多...

    C++实现ZIP文件解压

    1. **读取ZIP文件头**:解压过程的第一步是识别ZIP文件的起始标识符,即`PK\003\004`。这表示ZIP文件的中央目录头。找到此标志后,你可以解析后续的字段以获取关于文件的信息。 2. **解析中央目录**:在找到目录头...

    php生成zip文件类.zip

    在生成或读取ZIP文件时,要确保输入来源的安全性,防止可能的文件注入攻击。在添加文件时,验证文件路径的有效性,避免添加到不应该包含的路径。 9. **错误处理**: 在操作ZIP文件时,应适当地处理可能出现的错误...

    Python3读取zip文件信息的方法

    4. `open(name, mode='r')`:打开ZIP文件中的一个条目,返回一个文件对象,可以进行读写操作。 ```python with zip_obj.open('file_name.txt', 'r') as file_in_zip: content = file_in_zip.read() print...

    php的zip文件内容比较类.zip

    使用这个类,你可以打开一个ZIP文件,获取其中的文件列表,读取文件内容,并添加或删除文件。 以下是一些关于如何使用ZipArchive类的基本操作: 1. 打开ZIP文件: ```php $zip = new ZipArchive(); if ($zip-&gt;open...

    php解压zip文件

    这通常涉及到读取、创建、修改或解压ZIP文件。在这个场景中,我们关注的是如何使用PHP解压ZIP文件。下面将详细介绍PHP解压ZIP文件的核心知识点,并提供相关的代码示例。 ### PHP ZIP扩展 PHP提供了一个内置的ZIP...

Global site tag (gtag.js) - Google Analytics