POI API를 사용하여 CSV 파일로 변환하려는 XLSX 파일을 읽습니다. xlsx 파일은 서버에서 삭제되고 파일 권한은 -rw-r - r--입니다.Java가 java.io.FileNotFoundException을 throw합니다. /dir/file.xlsx "Permission denied"
public void processFirstSheet(String filename) throws Exception {
OPCPackage pkg = null;
try{
FileUtil.set777Permissions(filename);
pkg = OPCPackage.open(filename,PackageAccess.READ_WRITE);
}catch(Exception e){
log.warning("OPCPackage: "+ e.getMessage());
}
try{
XSSFReader r = new XSSFReader(pkg);
SharedStringsTable sst = r.getSharedStringsTable();
// creating the needed parser instance which will
// generate the needed rows
XMLReader parser = XMLReaderFactory.createXMLReader(ORG_APACHE_XERCES_PARSERS_SAX_PARSER);
ContentHandler handler = new RowGenerator(sst);
parser.setContentHandler(handler);
Iterator<InputStream> sheets = r.getSheetsData();
// if there are no sheets to open, return
if(!sheets.hasNext())
return;
// for the moment we parse the first sheet
InputStream sheet = sheets.next();
try {
InputSource sheetSource = new InputSource(sheet);
parser.parse(sheetSource);
} finally {
sheet.close();
}
} finally {
if(pkg!=null)
pkg.close();
}
}
가 디버깅의 pkg.close()는 다음과 같은 예외가 발생합니다 :
이
내가 사용하고 코드입니다java.io.FileNotFoundException: /dir/file.xlsx (Permission denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:212)
at java.io.FileOutputStream.<init>(FileOutputStream.java:165)
at org.apache.poi.openxml4j.opc.internal.FileHelper.copyFile(FileHelper.java:68)
at org.apache.poi.openxml4j.opc.ZipPackage.closeImpl(ZipPackage.java:334)
at org.apache.poi.openxml4j.opc.OPCPackage.close(OPCPackage.java:417)
at project.format.readers.impl.GCSXlsxReader.processFirstSheet(XlsxReader.java:96)
at project.format.readers.impl.XlsxReader.<init>(XlsxReader.java:54)
at project.format.impl.FileConverter.readAndConvert(FileConverter.java:135)
at project.format.impl.FileConverter.convert(FileConverter.java:66)
at project.watcher.impl.GCSDirectoryWatcher.startWatchinginDirectory(DirectoryWatcher.java:66)
at project.watcher.impl.GCSDirectoryWatcher.run(DirectoryWatcher.java:31)
at java.lang.Thread.run(Thread.java:722)
Dec 15, 2013 2:12:24 PM project.watcher.impl.FeedHelper archiveFile
내가 무엇을 볼 수있는, 내가 설정할 수 없습니다 권한 777을 파일에 추가합니다. 응용 프로그램을 실행하는 사용자는 Unix 서버에서 실행되는이 응용 프로그램 용으로 작성된 특정 사용자입니다.
SSH를 통해 서버에 연결될 때 chmod 777을 파일에 설정할 수 있습니다. 사용자 문제인 것 같지만이를 극복하는 방법을 모릅니다.
조언이 있으십니까?
고마워요.
ls -ld/dir/및 ls -l /dir/file.xlsx의 출력을 추가 할 수 있습니다. 사용자가 java 코드를 실행하는 데 사용되는 정보도 추가 할 수 있습니까? 예 : – JosefN