txt sobreescribir sirve que para modificar manejo guardar ejemplos datos como clase archivos archivo java path

sobreescribir - modificar archivos txt en java



¿Cómo combinar rutas en Java? (8)

Aquí hay una solución que maneja múltiples partes de camino y condiciones de borde:

public static String combinePaths(String ... paths) { if ( paths.length == 0) { return ""; } File combined = new File(paths[0]); int i = 1; while ( i < paths.length) { combined = new File(combined, paths[i]); ++i; } return combined.getPath(); }

¿Hay un equivalente de Java para System.IO.Path.Combine() en C # / .NET? ¿O algún código para lograr esto?

Este método estático combina una o más cadenas en una ruta.


En Java 7, debes usar resolve :

Path newPath = path.resolve(childPath);

Si bien la clase NIO2 Path puede parecer un poco redundante para File con una API innecesariamente diferente, de hecho es sutilmente más elegante y robusta.

Tenga en cuenta que Paths.get() (como lo sugiere otra persona) no tiene una sobrecarga al tomar una Path , y hacer Paths.get(path.toString(), childPath) NO es lo mismo que resolve() . resolve() es más inteligente. De los documentos de Paths.get() :

Tenga en cuenta que si bien este método es muy conveniente, su uso implicará una referencia supuesta al sistema de archivos predeterminado y limitará la utilidad del código de llamada. Por lo tanto, no debe utilizarse en el código de la biblioteca destinado a una reutilización flexible. Una alternativa más flexible es usar una instancia de ruta existente como un ancla, como:

Path dir = ... Path path = dir.resolve("file");

La función hermana a resolve es la excelente relativize :

Path childPath = path.relativize(newPath);


En lugar de mantener todo basado en cadenas, debe usar una clase diseñada para representar una ruta del sistema de archivos.

Si está utilizando Java 7 o Java 8, debería considerar el uso de java.nio.file.Path ; Path.resolve se puede utilizar para combinar una ruta con otra, o con una cadena. La clase de ayudante de Paths es útil. Por ejemplo:

Path path = Paths.get("foo", "bar", "baz.txt");

Si necesita atender entornos pre-Java-7, puede usar java.io.File , como este:

File baseDirectory = new File("foo"); File subDirectory = new File(baseDirectory, "bar"); File fileInDirectory = new File(subDirectory, "baz.txt");

Si desea recuperarlo como una cadena más adelante, puede llamar a getPath() . De hecho, si realmente quisieras imitar Path.Combine , podrías escribir algo como:

public static String combine(String path1, String path2) { File file1 = new File(path1); File file2 = new File(file1, path2); return file2.getPath(); }


La respuesta principal es usar objetos de archivo. Sin embargo, Commons IO tiene una clase FilenameUtils que puede hacer este tipo de cosas, como el método concat() .


Para mejorar la respuesta de JodaStephen, Apache Commons IO tiene FilenameUtils que hace esto. Ejemplo (en Linux):

assert org.apache.commons.io.FilenameUtils.concat("/home/bob", "work//stuff.log") == "/home/bob/work/stuff.log"

Es independiente de la plataforma y producirá cualquier separador que su sistema necesite.


Sé que ha pasado mucho tiempo desde la respuesta original de Jon, pero tenía un requisito similar al OP.

A modo de extender la solución de Jon, se me ocurrió lo siguiente, que tomará uno o más segmentos de ruta toma tantos segmentos de ruta que puede lanzar.

Uso

Path.combine("/Users/beardtwizzle/"); Path.combine("/", "Users", "beardtwizzle"); Path.combine(new String[] { "/", "Users", "beardtwizzle", "arrayUsage" });

Codifique aquí para otros con un problema similar

public class Path { public static String combine(String... paths) { File file = new File(paths[0]); for (int i = 1; i < paths.length ; i++) { file = new File(file, paths[i]); } return file.getPath(); } }


Si no necesita más que cadenas, puede usar com.google.common.io.Files

Files.simplifyPath("some/prefix/with//extra///slashes" + "file//name")

Llegar

"some/prefix/with/extra/slashes/file/name"


enfoque independiente de la plataforma (utiliza File.separator, es decir, will funciona según el sistema operativo donde se ejecuta el código:

java.nio.file.Paths.get(".", "path", "to", "file.txt") // relative unix path: ./path/to/file.txt // relative windows path: ./path/to/filee.txt java.nio.file.Paths.get("/", "path", "to", "file.txt") // absolute unix path: /path/to/filee.txt // windows network drive path: //path/to/file.txt java.nio.file.Paths.get("C:", "path", "to", "file.txt") // absolute windows path: C:/path/to/file.txt