자바 압축 해제 패키지,Liux 에서 Aix 시스템 에서 난 코드 처리 방법
6054 단어 linux
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class ImportInvalidCardNo {
/*
*
* window
* linux /etc/sysconfig/i18n LANG="zh_CN.GBK"
* Aix
* */
public String batchInsertInvalidCardNo() throws Exception {
HttpServletResponse response = ServletActionContext.getResponse();
String fileUrl ="E:/test/";
File file = new File(fileUrl);
File[] files = file.listFiles();//
String data = "";
String url = "";
for (File f : files) {
String filepath = f.getName();
String zipUrl = filepath.substring(
filepath.lastIndexOf('.') + 1).trim();
if (zipUrl.equals("zip")) {
ZipFile z1 = new ZipFile(f);
Enumeration emun = z1.getEntries();
while (emun.hasMoreElements()) {
ZipEntry entry = (ZipEntry) emun.nextElement();
//
try {
if (!entry.isDirectory()) {
url = entry.getName();
List<InvalidCardNo> oneFileInfo = this.readFile(z1,
entry);
ServiceReturn sRet =this.importInvalidCardNoService.addInvalidCardNo(oneFileInfo,url);//
}
} catch (Exception e) {
// , ,
ErrorCardscrapinfotb errorCardscrapinfotb = new ErrorCardscrapinfotb();
//url=new String(url.getBytes("ISO8859_1"),"GBK");// Aix ,windows
errorCardscrapinfotb.setErrorfileurl(url);
ServiceReturn sRet = this.importInvalidCardNoService.addErrorCardscrapinfotb(errorCardscrapinfotb);
//e.printStackTrace();
continue;
}
}
z1.close();
File dleteFile = new File(deleteUrl);
dleteFile.delete();
}
}
data = " " + successCount + " , !";
ServiceReturn sRet = new ServiceReturn(true, "SUCCESS");
JSONObject retObj = super.convertServiceReturnToJson(sRet);
retObj.put("retmsg", data);
super.setActionresult(retObj.toString());
return AJAX_SUCCESS;
}
private List<InvalidCardNo> readFile(ZipFile z1, ZipEntry entry)
throws Exception {
//
InputStream in = z1.getInputStream(entry);
List<InvalidCardNo> invalidCardNoList = new ArrayList<InvalidCardNo>();
Cell cell = null;
Workbook wb = Workbook.getWorkbook(in); //
Sheet sheet=null;
try {
sheet = wb.getSheet(0);//
//
cell = sheet.getCell(0, 0);
}
catch (Exception e) {
sheet = wb.getSheet(1);// if ,
//
cell = sheet.getCell(0, 0);
}
String fistInfo = cell.getContents();
// 2 , 2 , 2 。
for (int i = 2; i < sheet.getRows(); i++) {
//
for (int j = 0; j < sheet.getColumns() - 1; j++) {
j++;
cell = sheet.getCell(j, i);
if (!(cell.getContents().trim().equals("") || cell.getContents() == null)) {
InvalidCardNo info = new InvalidCardNo();
// i , j
String tempcard = cell.getContents();
String cityCode = tempcard.substring(0, 4);
String cardNo = tempcard.substring(4, 16);
info.setCitycode(Integer.valueOf(cityCode));
info.setCardno(cardNo);
invalidCardNoList.add(info);
}
}
}
in.close();
return invalidCardNoList;
}
}
문제 도입 을 시작 한 가방 은 자바 util 입 니 다.*windows 환경 에서 구체 적 인 엑셀 파일 이름 을 읽 을 때 혼 란 스 럽 습 니 다.InputStream in= z1.getInputStream(entry); 그 중에서 entry.getName()이 어 지 러 워 서 파일 을 읽 을 수 없 었 습 니 다.나중에 import org.apache.tools.zip.ZipEntry 로 바 뀌 었 습 니 다.import org.apache.tools.zip.ZipFile; 의 가방,어 지 러 운 코드 가 해결 되 어 windows 에서 정상적으로 운행 할 수 있 습 니 다.
문제 2:Linux 환경 에 배치 되 어 파일 경 로 를 읽 을 때 코드 가 어 지 러 워 집 니 다.구체 적 인 이 유 는 Linux 에서 Windows 플랫폼 에서 압축 된 중국어 파일 이름 이 포 함 된 zip 파일 을 압축 할 때 압축 된 파일 이름 이 어 지 러 워 지기 때 문 입 니 다.이 문제 의 근본 원인 은 윈도 중국어 판 에 zip 파일 을 압축 할 때 윈도 가 GBK 를 파일 이름 인 코딩 으로 사용 하 는 것 은 불합리한 것 이다.정상 적 인 방식 은 리 눅 스 플랫폼 처럼 UTF-8 인 코딩 을 기본적으로 사용 해 야 한다.
각종 코드 를 모두 한 번 시험 해 보 았 지만 소 용이 없 었 다.인터넷 에서 두 가지 방법 으로 문 제 를 해결 했다.
1.unzip 줄 명령 을 통 해 압축 을 풀 고 문자 집합 unzip-O CP 936 xxx.zip(GBK,GB 18030 으로 도 가능)을 지정 합 니 다.재 미 있 는 것 은 unzip 의 manual 에 이 옵션 에 대한 설명 이 없습니다.unzip-help 는 이 매개 변수 에 대해 간단 한 설명 을 합 니 다.
2.환경 변수 에 unzip 인 자 를 지정 하고 항상 지정 한 문자 집합 으로 파일/etc/environment 에 UNZIP="-O CP 936"ZIPINFO="-O CP 936"을 추가 합 니 다.
첫 번 째 는 우리 의 것 과 맞지 않 는 다 는 것 을 발견 하고,두 번 째 는 시도 해 보 았 지만 소 용이 없 었 다.
마지막 으로 Liux 의 현재 환경 을 중국어 환경 으로 설정 하면 됩 니 다.수정/etc/sysconfig/i18n 파일 LANG="zhCN.GB 2312"또는 LANG="zh 로 설정CN.GBK"모두 가능 합 니 다.
문제 3:Linux 에서 수정 에 성 공 했 습 니 다.온라인 환경 은 Aix 입 니 다.정말 답답 합 니 다.하지만 AIX 시스템 에서 파일 이름 을 읽 을 수 있 습 니 다.바로 데이터 베 이 스 를 삽입 할 때 코드 를 어 지 럽 히 는 것 입 니 다.이것 이 해결 되 기 좋 습 니 다. 데이터베이스 에 삽 입 된 url 코드 를 바 꾸 면 됩 니 다.
url=new String(url.getBytes("ISO8859_1"),"GBK")
난 장 판 은 여러 가지 상황 이 모두 해결 되 었 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.