2017-02-08 3 views
0

Этот код должен получить абсолютный путь, добавить строку из файла настроек и затем добавить «.json» для соответствия нужному файлу. Я попытался с помощью «+» для конкатенации строк, но он дает тот же результат, как StringBuilder.append()Конкатенация Java не работает

StringBuilder pt= new StringBuilder(path); 
    pt.append(System.getProperty("file.separator")); 
    pt.append("lib"); 
    pt.append(System.getProperty("file.separator")); 
    pt.append("ling"); 
    pt.append(System.getProperty("file.separator")); 
    String lingua =PrefManager.getPref("lingua")+("="); 
    System.out.println(lingua); 
    pt.append(lingua); 
    System.out.println("com extensão"+pt.toString()); 
    String file = pt.toString(); 
    System.out.println(file); 
    System.out.println(file); 
    Object obj = parser.parse(new FileReader(file)); 

Это моя консоль выход:

=t-br 
=om extensão/home/mateus/BrinoBuildScript/Filesx64/lib/ling/pt-br 
=home/mateus/BrinoBuildScript/Filesx64/lib/ling/pt-br 
=home/mateus/BrinoBuildScript/Filesx64/lib/ling/pt-br 
java.io.FileNotFoundException: /home/mateus/BrinoBuildScript/Filesx64/lib/ling/p= (No such file or directory) 

Как переменная может иметь три разные выходы на консоль? что я должен сделать, чтобы исправить это?

+0

Почему три различных выходов? Какой результат вы ожидаете? – IQV

+0

Выходы те же, кроме текста «com extensão», который вы предварительно предваряете в первом выходе этой переменной ... – john16384

+0

Также вы никогда не добавляете .json или что вы ожидали? – Xander

ответ

0

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

pt-br= 
com extensão\home\mateus\BrinoBuildScript\Filesx64\lib\ling\pt-br= 
\home\mateus\BrinoBuildScript\Filesx64\lib\ling\pt-br= 
\home\mateus\BrinoBuildScript\Filesx64\lib\ling\pt-br= 

В этом выводе, вы можете увидеть, что строка file правильно установлен (хотя вы, вероятно, не намерены иметь завершающую «=»).

Пока вы стараетесь использовать разделитель системных путей, конкатенация немного неуклюжа. Если вы используете старую версию Java, НУ может попытаться составить свой путь, используя класс File:

final String path = "\\home\\mateus\\BrinoBuildScript\\Filesx64"; 
final File libFolder = new File(path, "lib"); 
final File lingFolder = new File(libFolder, "ling"); 
final File languageFolder = new File(lingFolder, PrefManager.getPref("lingua")); 
System.out.println(languageFolder.getAbsolutePath()); 

Если вы используете последнюю версию Java, вы можете использовать API Paths (который делает обрабатывать платформу -специфические разделителей):

final Path p = Paths.get(path, "lib", "ling", PrefManager.getPref("lingua")); 
System.out.println(p); 

Смотрите учебник Java на API Контуры здесь:

https://docs.oracle.com/javase/tutorial/essential/io/pathOps.html

+0

спасибо, посмотрим на API путей. Мне удалось выполнить конкатенацию .json с помощью string.format («% s.% S») –

Смежные вопросы