처음으로 나는이 질문을 모든 가정에서 물어 봅니다. 나는 내일 갱신하려고 노력할 것이다.파일로 NPOIFSFileSystem 객체 인스턴스화 문제
는 기본적으로 나는과 같이 NPOIFSFileSystem를 인스턴스화하고 있습니다 :
NPOIFSFileSystem fs = new NPOIFSFileSystem(new File(this.getLocalFile()));
getLocalFile() 메소드는 파일 경로 문자열을 반환 - 나는 파일이 해당 위치에 존재하는 것을 알고있다. 그러나, instatiation 오류를 반환합니다 :
ArrayIndexOutOfBounds
아무도 이것에 전혀 아이디어가 있습니까?
해당 파일은 XLS 파일이며 아랍어 문자가 포함되어 있으며 문제가 발생할 수 있는지 궁금합니다.
는나는 이전에이 사용 POIFSFileSystem하지만 문제의 XLS 파일은 일부 문제와 각종 포럼 그래서, 누군가가 전에 본했다
NPOIFSFileSystem
로 이동 권장 원인이나요? 아니면 누구도 나에게 몇 가지 팁/포인터를 제공해 줄 수 있습니까?내일 명확히 물어볼 필요가있는 경우, 직장에 돌아 왔을 때 (우리는 인터넷 연결을 수정했습니다)이 질문을 업데이트 할 것입니다. 사전에
감사 나단
편집 여기에 1 전체 스택 추적입니다 :
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at org.apache.poi.poifs.filesystem.BlockStore$ChainLoopDetector.claim(BlockStore.java:95)
at org.apache.poi.poifs.filesystem.NPOIFSStream$StreamBlockByteBufferIterator.next(NPOIFSStream.java:212)
at org.apache.poi.poifs.filesystem.NPOIFSStream$StreamBlockByteBufferIterator.next(NPOIFSStream.java:186)
at org.apache.poi.poifs.property.NPropertyTable.buildProperties(NPropertyTable.java:88)
at org.apache.poi.poifs.property.NPropertyTable.<init>(NPropertyTable.java:66)
at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.readCoreContents(NPOIFSFileSystem.java:379)
at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.<init>(NPOIFSFileSystem.java:202)
at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.<init>(NPOIFSFileSystem.java:163)
at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.<init>(NPOIFSFileSystem.java:145)
at com.turnitin.datamap.parser.standard.XLSParser.defineParsableObject(XLSParser.java:67)
at com.turnitin.datamap.parser.standard.XLSParser.setUp(XLSParser.java:56)
at com.turnitin.datamap.parser.standard.XLSParser.<init>(XLSParser.java:46)
at com.turnitin.datamap.controller.DataMapController.parseData(DataMapController.java:255)
at com.turnitin.datamap.controller.DataMapController.processControl(DataMapController.java:162)
at com.turnitin.datamap.controller.DataMapController.processStart(DataMapController.java:130)
at com.turnitin.datamap.controller.DataMapController.main(DataMapController.java:61)
나는 3.9로 업그레이드하고 다시 시도합니다 POI3-8
를 실행하고 너에게 알려줘.
다시 한번 감사 나단
편집 2
나는 3.9로 업데이트하고 곧 다시 테스트합니다 - 다른 항목 시험 전에 완료 될 때까지 그냥 기다리고. 나는 결과를 게시 할 것이다.
감사 나단
EDIT 3 같은 이상한 문제. 다음은 POI 3을 사용하는 스택 추적입니다.9 : 나는 POIFSFileSystem에 NPOIFSFileSystem에서 전환 한
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at org.apache.poi.poifs.filesystem.BlockStore$ChainLoopDetector.claim(BlockStore.java:95)
at org.apache.poi.poifs.filesystem.NPOIFSStream$StreamBlockByteBufferIterator.next(NPOIFSStream.java:212)
at org.apache.poi.poifs.filesystem.NPOIFSStream$StreamBlockByteBufferIterator.next(NPOIFSStream.java:186)
at org.apache.poi.poifs.property.NPropertyTable.buildProperties(NPropertyTable.java:88)
at org.apache.poi.poifs.property.NPropertyTable.<init>(NPropertyTable.java:66)
at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.readCoreContents(NPOIFSFileSystem.java:379)
at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.<init>(NPOIFSFileSystem.java:202)
at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.<init>(NPOIFSFileSystem.java:163)
at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.<init>(NPOIFSFileSystem.java:145)
at com.turnitin.datamap.parser.standard.XLSParser.defineParsableObject(XLSParser.java:67)
at com.turnitin.datamap.parser.standard.XLSParser.setUp(XLSParser.java:56)
at com.turnitin.datamap.parser.standard.XLSParser.<init>(XLSParser.java:46)
at com.turnitin.datamap.controller.DataMapController.parseData(DataMapController.java:264)
at com.turnitin.datamap.controller.DataMapController.processControl(DataMapController.java:162)
at com.turnitin.datamap.controller.DataMapController.processStart(DataMapController.java:130)
at com.turnitin.datamap.controller.DataMapController.main(DataMapController.java:61)
감사 나단
EDIT 4 :
FileInputStream fis = new FileInputStream(this.getFileToParse());
POIFSFileSystem excelFile = new POIFSFileSystem(fis);
Workbook wb = WorkbookFactory.create(excelFile);
이 나에게 다음과 같은 스택 추적 제공 :
java.io.IOException: block[ 1273 ] already removed - does your POIFS have circular or duplicate block references?
at org.apache.poi.poifs.storage.BlockListImpl.remove(BlockListImpl.java:89)
at org.apache.poi.poifs.storage.RawDataBlockList.remove(RawDataBlockList.java:34)
at org.apache.poi.poifs.storage.BlockAllocationTableReader.fetchBlocks(BlockAllocationTableReader.java:221)
at org.apache.poi.poifs.storage.BlockListImpl.fetchBlocks(BlockListImpl.java:123)
at org.apache.poi.poifs.storage.RawDataBlockList.fetchBlocks(RawDataBlockList.java:34)
at org.apache.poi.poifs.property.PropertyTable.<init>(PropertyTable.java:63)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:159)
at com.turnitin.datamap.parser.standard.XLSParser.defineParsableObject(XLSParser.java:68)
at com.turnitin.datamap.parser.standard.XLSParser.setUp(XLSParser.java:56)
at com.turnitin.datamap.parser.standard.XLSParser.<init>(XLSParser.java:46)
at com.turnitin.datamap.controller.DataMapController.parseData(DataMapController.java:264)
at com.turnitin.datamap.controller.DataMapController.processControl(DataMapController.java:162)
at com.turnitin.datamap.controller.DataMapController.processStart(DataMapController.java:130)
at com.turnitin.datamap.controller.DataMapController.main(DataMapController.java:61)
을
파일이 존재하며 유효한 XLS 파일임을 알고 있습니다.
Java 1.7 및 Poi 3.9를 사용하고 있습니다.
응용 프로그램에/usr/자바/data_map_tool에서 실행하고 파일을 다운로드/홈/javaapp/data_map_files
응용 프로그램이 해당 디렉토리의 소유자 인 javaapp 사용자로 실행에서 처리됩니다 .
한순간에 나는 응용 프로그램이 실행중인 디렉토리 내의 디렉토리에 다운로드 된 파일을 가지고 있었지만 작동했습니다. 그러나 파일 크기는 파일 저장소로 사용하는 것을 금지합니다.
누구든지 이것에 대해 머리를 벽에 부딪히는 사람이 있습니까?
는 전체 스택 트레이스를 게시 할 수 있을까요? 그리고 최신 버전의 Apache POI (3.9)를 사용해 보셨습니까? – Gagravarr
Excel에서 파일을 열고 "다른 이름으로 저장"을 수행하면 새 파일이 제대로 열립니까? NPOIFSFileSytem 및 POIFSFileSystem의 예외는 저수준 OLE2 구조에서 계속 진행되고있는 문제가 있음을 나타냅니다 .... 또한 문제 파일이 공개적으로 사용 가능합니까? – Gagravarr
나는 그것을 시도했지만 문제가 해결되지 않습니다. 불행히도이 파일은 공개적으로 사용할 수 없습니다. 그러나 xsl 파일에 아랍어 문자가 포함되어 있다는 사실을 알 수 있습니다. 그것은 잠재적 인 문제와 해결책을 나타 냅니까? 지금까지 도움을 주셔서 감사합니다. – nathj07