txt sobreescribir modificar manejo leer guardar ejemplos datos crear como comandos carpeta archivos archivo java java-io

sobreescribir - modificar archivos txt en java



Cree un directorio si no existe y luego cree los archivos en ese directorio tambiƩn (5)

Este código comprueba primero la existencia del directorio y lo crea si no, y luego crea el archivo. Tenga en cuenta que no pude verificar algunas de sus llamadas a métodos ya que no tengo su código completo, por lo que supongo que las llamadas a cosas como getTimeStamp() y getClassName() funcionarán. También debe hacer algo con la posible IOException que se puede generar al usar cualquiera de las clases java.io.* : su función que escribe los archivos debe generar esta excepción (y se debe manejar en otro lugar), o debe hacerlo en El método directamente. Además, supuse que id es de tipo String ; no sé, ya que su código no lo define explícitamente. Si es algo más como un int , probablemente debería convertirlo en una String antes de usarlo en el nombre de archivo como lo he hecho aquí.

Además, reemplacé sus llamadas concat con concat o + como lo vi apropiado.

public void writeFile(String value){ String PATH = "/remote/dir/server/"; String directoryName = PATH.concat(this.getClassName()); String fileName = id + getTimeStamp() + ".txt"; File directory = new File(directoryName); if (! directory.exists()){ directory.mkdir(); // If you require it to make the entire directory path including parents, // use directory.mkdirs(); here instead. } File file = new File(directoryName + "/" + fileName); try{ FileWriter fw = new FileWriter(file.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); bw.write(value); bw.close(); } catch (IOException e){ e.printStackTrace(); System.exit(-1); } }

Probablemente no debería usar nombres de ruta desnuda como este si desea ejecutar el código en Microsoft Windows; no estoy seguro de qué hará con / en los nombres de archivo. Para una portabilidad total, probablemente debería usar algo como File.separator para construir sus rutas.

Editar : según un comentario de JosefScript continuación, no es necesario probar la existencia del directorio. La llamada a directory.mkdir() devolverá true si creó un directorio, y false si no lo hizo, incluido el caso cuando el directorio ya existía.

La condición es que si el directorio existe, tiene que crear archivos en ese directorio específico sin crear un nuevo directorio.

El siguiente código solo crea un archivo con un nuevo directorio pero no para el directorio existente. Por ejemplo, el nombre del directorio sería como "GETDIRECTION"

String PATH = "/remote/dir/server/"; String fileName = PATH.append(id).concat(getTimeStamp()).append(".txt"); String directoryName = PATH.append(this.getClassName()); File file = new File(String.valueOf(fileName)); File directory = new File(String.valueOf(directoryName)); if(!directory.exists()){ directory.mkdir(); if(!file.exists() && !checkEnoughDiskSpace()){ file.getParentFile().mkdir(); file.createNewFile(); } } FileWriter fw = new FileWriter(file.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); bw.write(value); bw.close();


Sugeriría lo siguiente para Java8 +.

/** Creates parent directories if necessary. Then returns file */ private static File fileWithDirectoryAssurance(String directory, String filename) { File dir = new File(directory); if (!dir.exists()) dir.mkdirs(); return new File(directory + "/" + filename); }


Tratando de hacer esto lo más corto y simple posible. Crea un directorio si no existe y luego devuelve el archivo deseado:

/** * Creates a File if the file does not exist, or returns a * reference to the File if it already exists. */ private File createOrRetrieve(final String target) throws IOException{ final Path path = Paths.get(target); if(Files.notExists(path)){ LOG.info("Target file /"" + target + "/" will be created."); return Files.createFile(Files.createDirectories(path)).toFile(); } LOG.info("Target file /"" + target + "/" will be retrieved."); return path.toFile(); } /** * Deletes the target if it exists then creates a new empty file. */ private File createOrReplaceFileAndDirectories(final String target) throws IOException{ final Path path = Paths.get(target); // Create only if it does not exist already Files.walk(path) .filter(p -> Files.exists(p)) .sorted(Comparator.reverseOrder()) .peek(p -> LOG.info("Deleted existing file or directory /"" + p + "/".")) .forEach(p -> { try{ Files.createFile(Files.createDirectories(p)); } catch(IOException e){ throw new IllegalStateException(e); } }); LOG.info("Target file /"" + target + "/" will be created."); return Files.createFile( Files.createDirectories(path) ).toFile(); }


Usar java.nio.Path sería bastante simple:

public static Path createFileWithDir(String directory, String filename) { File dir = new File(directory); if (!dir.exists()) dir.mkdirs(); return Paths.get(directory + File.separatorChar + filename); }


código:

// Create Directory if not exist then Copy a file. public static void copyFile_Directory(String origin, String destDir, String destination) throws IOException { Path FROM = Paths.get(origin); Path TO = Paths.get(destination); File directory = new File(String.valueOf(destDir)); if (!directory.exists()) { directory.mkdir(); } //overwrite the destination file if it exists, and copy // the file attributes, including the rwx permissions CopyOption[] options = new CopyOption[]{ StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES }; Files.copy(FROM, TO, options); }