2013-12-15 1 views
1

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을 파일에 설정할 수 있습니다. 사용자 문제인 것 같지만이를 극복하는 방법을 모릅니다.

조언이 있으십니까?

고마워요.

+2

ls -ld/dir/및 ls -l /dir/file.xlsx의 출력을 추가 할 수 있습니다. 사용자가 java 코드를 실행하는 데 사용되는 정보도 추가 할 수 있습니까? 예 : – JosefN

답변

2

파일의 복사본을 저장하려고합니다. 파일에 대한 몇 가지 변경 사항을 저장하려고합니다. 이렇게하려면 파일에 응용 프로그램 사용자에 대해 쓰기 권한이 설정되어 있어야합니다. 그렇지 않으면 소유자를 변경해야합니다.

+0

실제로 ... 파일에 대한 사용 권한과 관련이있을 확률이 높습니다 ... 도움을 주셔서 감사합니다! –