2014-10-17 4 views
0

Моя проблема очень проста, и все же я не могу понять, как ее решить. У меня есть текстовые файлы в папке: «C: /aaa/bbb/ccc/ddd/test.txt» И excel файлы в папке в папке текстовых файлов: «C:/aaa/bbb/ccc/ddd/excelFiles/test.xls " И текст, и файлы excel имеют одинаковое имя.получить путь к файлу в java

Я бы хотел (-а) получить доступ к пути к этим файлам excel. Что я сделал: this.file.getParent()+"\\"+"excelFiles"+"\\"+file.getName().substring(0, fileName.indexOf('.'))+".xls"

Я получаю сообщение об ошибке «String index out the range». Спасибо за вашу помощь :)

+0

Как выглядит 'fileName'? – fabian

+0

О, я просто понял свою ошибку. Я поместил absolutePath в fileName. Вот почему у меня были проблемы! Спасибо вам за помощь. :) –

ответ

1

Если я правильно понял ваш вопрос, один вариант заключается в использовании File.getCanonicalPath() как,

try { 
    File f = new File("C:/aaa/bbb/ccc/ddd/excelFiles/test.xls"); 
    System.out.println(f.getCanonicalPath()); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
0

Вы могли бы хотеть попробовать это ->

Строка dynamicExcelFileName = файл. getName(). substring (0, fileName.indexOf ('.'))

в переменную и использовать ее в пути для доступа к файлу excel.

Таким образом, вы можете быть уверены, что проверьте правильность захвата пути в переменной или нет и, следовательно, меньше шансов получить индекс из диапазона.

плюс код более читаемым

0

Глядя на ваш фрагмент кода, я вижу, что вы подключаетесь имя файла двумя различными способами:

file.getName().substring(...) 

и

fileName.indexOf(...). 

Вы уверены, что fileName не пуст, когда вы пытаетесь определить индекс точки?

0

Этого можно достичь довольно легко, даже без использования существующих библиотек, таких как FileUtils.

Эти три метода можно создать соответствующий Excel File объект для текстового объекта

private File getExcelFile(final File txtFile) throws IOException { 
    final String path = txtFile.getCanonicalPath(); 
    final String directory = path.substring(0, path.lastIndexOf(System.getProperty("file.separator"))); 
    return new File(getExcelSubdirectory(directory), getExcelFilename(txtFile.getName())); 
} 

private File getExcelSubdirectory(final String parent) { 
    return new File(parent, "excelFiles"); 
} 

private static String getExcelFilename(final String filename) { 
    return filename.substring(0, filename.lastIndexOf('.')) + ".xls"; 
} 

Если вы используете их, как это:

File txt = new File("C:/aaa/bbb/ccc/ddd/test.txt"); 
System.out.println(txt.getCanonicalPath()); 
File excel = getExcelFile(txt); 
System.out.println(excel.getCanonicalPath()); 

.. он будет печатать:

C:\aaa\bbb\ccc\ddd\test.txt 
C:\aaa\bbb\ccc\ddd\excelFiles\test.xls 
0

this.file.getParent() + "\" + "excelFiles" + "\" + file.getName(). Substring (0, this.file.getName () .indexOf ('.')) + ". xls"