2015-05-07 4 views
0

У меня есть фрагмент кода, в котором я должен прочитать файл для его возможного содержимого.Исправление ошибки манипуляции пути для имени файла

Я столкнулся с ошибкой манипуляции с путями для того же самого.

PFB код:

while ((ze = zis.getNextEntry()) != null) { 
    String fileName = ze.getName(); 
    String esapiFileName = ESAPI.encoder().canonicalize(fileName); 
    boolean esapiValidFileName = ESAPI.validator().isValidFileName("upload", esapiFileName, false); 
    String _completefileNamePath = null; 
    if (esapiValidFileName) { 
     _completefileNamePath = _destination + esapiFileName; 
     // Below line having Path Manipulation error 
     FileOutputStream fos = new FileOutputStream(new File(_completefileNamePath).getCanonicalFile()); 
     // Path Manipulation error ends 
     while ((size = zis.read(buffer, 0, buffer.length)) != -1) { 
     fos.write(buffer, 0, size); 
     }// while 
     fos.flush(); 
     fos.close(); 
     zis.closeEntry(); 
    } 
} 
+0

что значение _completefileNamePath когда это вы получите эту ошибку? –

+0

_completefileNamePath is /home/batch/app/ackfile/filename.txt – Alpesh003

ответ

1

ли ваши пути абсолютной или относительной?

Кстати, Вы на самом деле не нужно, чтобы получить канонический файл перед открытием FileOutputStream:

FileOutputStream fos = new FileOutputStream(_completefileNamePath); 

или

FileOutputStream fos = new FileOutputStream(new File(_completefileNamePath)); 

или

import java.nio.file.Files; 
import java.nio.file.Paths; 

while ((ze = zis.getNextEntry()) != null) { 
    String fileName = ze.getName(); 
    String esapiFileName = ESAPI.encoder().canonicalize(fileName); 
    boolean esapiValidFileName = ESAPI.validator().isValidFileName("upload", esapiFileName, false); 
    String _completefileNamePath = null; 
    if (esapiValidFileName) { 
     _completefileNamePath = _destination + esapiFileName; 
     // optional: Files.createDirectories(Paths.get(_completefileNamePath).getParent()); 
     Files.copy(zis, Paths.get(_completefileNamePath)); 
     zis.closeEntry(); 
    } 
} 
+0

, так что достаточно просто удалить информацию о каноническом файле? – Alpesh003

+0

Это может быть так, потому что в любом случае не было необходимости. И при условии, что имя файла действительно действительно. –

+0

Хорошо, давайте попробуем удалить канонический файл. – Alpesh003