Точный дубликат:
Хотелось бы узнать, есть ли в Java такой метод. В качестве примера возьмем этот фрагмент:
// this will output a/b
System.out.println(path_join("a","b"));
// a/b
System.out.println(path_join("a","/b");
Хотелось бы узнать, есть ли в Java такой метод. В качестве примера возьмем этот фрагмент:
// this will output a/b
System.out.println(path_join("a","b"));
// a/b
System.out.println(path_join("a","/b");
Это касается версии Java 7 и ранее.
Чтобы процитировать хороший ответ на тот же вопрос:
Если вы хотите вернуть его в виде строки позже, вы можете вызвать getPath (). В самом деле, если вы действительно хотели имитировать Path.Combine, вы могли бы просто написать что-то вроде:
public static String combine (String path1, String path2) {
File file1 = new File(path1);
File file2 = new File(file1, path2);
return file2.getPath();
}
Paths.get(path1, path2)
- person Jason Yeo; 19.05.2016
Пытаться:
String path1 = "path1";
String path2 = "path2";
String joinedPath = new File(path1, path2).toString();
getPath()
или getAbsolutePath()
не лучше, чем toString()
?
- person Matt Connolly; 03.10.2012
toString()
совпадает с getPath()
для класса File.
- person fstanis; 12.02.2016
getPath()
более читабелен по сравнению с toString()
(при условии, что они возвращают одно и то же)
- person Nawaz; 28.05.2018
Один из способов - получить системные свойства, которые предоставляют разделитель путей для операционной системы, в этом руководстве объясняется, как это сделать. Затем вы можете использовать стандартное соединение строк с помощью file.separator
.
Это начало, я не думаю, что оно работает так, как вы предполагаете, но, по крайней мере, дает стабильный результат.
import java.io.File;
public class Main
{
public static void main(final String[] argv)
throws Exception
{
System.out.println(pathJoin());
System.out.println(pathJoin(""));
System.out.println(pathJoin("a"));
System.out.println(pathJoin("a", "b"));
System.out.println(pathJoin("a", "b", "c"));
System.out.println(pathJoin("a", "b", "", "def"));
}
public static String pathJoin(final String ... pathElements)
{
final String path;
if(pathElements == null || pathElements.length == 0)
{
path = File.separator;
}
else
{
final StringBuilder builder;
builder = new StringBuilder();
for(final String pathElement : pathElements)
{
final String sanitizedPathElement;
// the "\\" is for Windows... you will need to come up with the
// appropriate regex for this to be portable
sanitizedPathElement = pathElement.replaceAll("\\" + File.separator, "");
if(sanitizedPathElement.length() > 0)
{
builder.append(sanitizedPathElement);
builder.append(File.separator);
}
}
path = builder.toString();
}
return (path);
}
}