-
¿ Puede un objeto
File
corresponder a un archivo que aún no existe?Sí, si pasa el valor del directorio al constructor.
String dirPath = "/"; File f = new File(dirPath); File[] files = f.listFiles();
Esto se hace, por ejemplo, para obtener una serie de archivos.
public class MyClass { public static void main(String[] args) { boolean isObject = false; File file = new File("/"); if (file instanceof Object){ isObject = true; } boolean isFile = file.isFile(); // Tests whether the file denoted by this abstract pathname is a normal file. Это из documentoации System.out.println(isObject + " "+ isFile); } }
Salida:
verdadero falsoFile
hereda deobject
. Respuesta: ¡sí! Estoy esperando tus comentarios. -
¿ Cómo convertir un objeto
File
a tipoPath
?Método
toPath();
toPath(); //Returns a java.nio.file.Path object constructed from the this abstract path.
-
¿Por qué se necesita la clase Archivos?
Tomamos la clase como base
File
, le agregamos algo nuevo, cambiamos el nombre de los métodos y al final también la dividimos en dos. Ahora hay dos clases nuevas:Path
yFiles
.Path
- esto es, de hecho, un nuevo análogo de la claseFile
, yFiles
- esta es una clase de utilidad (por analogía con las clasesArrays
&Collections
), a ella se le han transferido todos los métodos estáticos de la claseFile
. Esto es "más correcto" desde el punto de vista de OOP.M.Algunos de los documentos:
public final class Files
extends Object
Esta clase consta exclusivamente de métodos estáticos que operan en archivos, directorios u otros tipos de archivos.
En la mayoría de los casos, los métodos definidos aquí delegarán al proveedor del sistema de archivos asociado la realización de las operaciones con el archivo. -
¿Qué clases de archivo conoces?
Un buen artículo sobre este tema y un extracto del mismo: Archivar en Java
Hay dos paquetes en la especificación de Java para trabajar con archivos,
java.util.zip
yjava.util.jar
respectivamente para archivos zip y jar. La diferencia entre los formatos jar y zip está sólo en la extensión del archivo zip. Un paquetejava.util.jar
es similar a un paquetejava.util.zip
, excepto por la implementación de constructores y un métodovoidputNextEntry(ZipEntry e)
de claseJarOutputStream
. Sólo el paquete se discutirá a continuaciónjava.util.jar
. Para convertir todos los ejemplos para usar un archivo zip, simplemente reemplace Jar con Zip en todas partes del código. -
¿Cómo agregar un directorio a un archivo?
Por mi parte, entendí esta pregunta como agregar un directorio vacío a un archivo terminado. No encontré ningún ejemplo funcional. Aquí está el código: (Muestra claramente que puedes poner cualquier archivo en el archivo, pero con un directorio vacío... No sé cómo responder, no publiqué en StackOverFlow, esa pregunta definitivamente será votado en contra) Si alguien tiene alguna sugerencia, escriba.
public class Main { public static void main(String[] args) { String[] myFiles = {"D:\\forJava\\MyArtifactName\\packForTest\\res2.txt", "D:\\forJava\\MyArtifactName\\packForTest\\res.txt", "D:\\forJava\\MyArtifactName\\packForTest\\res4.txt", "D:\\forJava\\MyArtifactName\\packForTest\\testDir\\" }; String zipFile = "D:\\forJava\\MyArtifactName\\packForTest\\res.zip"; ZipUtility zipUtil = new ZipUtility(); try { zipUtil.zip(myFiles, zipFile); } catch (Exception ex) { // some errors occurred ex.printStackTrace(); } } }
La pregunta es sobre el último testDir, la JVM no lo coloca en el archivo resultante, con todos los demás archivos de texto funciona bien.
ZipUtility.java
:import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipUtility { private static final int BUFFER_SIZE = 4096; public void zip(List<File> listFiles, String destZipFile) throws IOException { ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(destZipFile)); for (File file : listFiles) { if (file.isDirectory()) { zipDirectory(file, file.getName(), zos); } else { zipFile(file, zos); } } zos.flush(); zos.close(); } public void zip(String[] files, String destZipFile) throws IOException { List<File> listFiles = new ArrayList<File>(); for (int i = 0; i < files.length; i++) { listFiles.add(new File(files[i])); } zip(listFiles, destZipFile); } private void zipDirectory(File folder, String parentFolder, ZipOutputStream zos) throws IOException { for (File file : folder.listFiles()) { if (file.isDirectory()) { zipDirectory(file, parentFolder + "/" + file.getName(), zos); continue; } zos.putNextEntry(new ZipEntry(parentFolder + "/" + file.getName())); BufferedInputStream bis = new BufferedInputStream( new FileInputStream(file)); long bytesRead = 0; byte[] bytesIn = new byte[BUFFER_SIZE]; int read = 0; while ((read = bis.read(bytesIn)) != -1) { zos.write(bytesIn, 0, read); bytesRead += read; } zos.closeEntry(); } } private void zipFile(File file, ZipOutputStream zos) throws IOException { zos.putNextEntry(new ZipEntry(file.getName())); BufferedInputStream bis = new BufferedInputStream(new FileInputStream( file)); long bytesRead = 0; byte[] bytesIn = new byte[BUFFER_SIZE]; int read = 0; while ((read = bis.read(bytesIn)) != -1) { zos.write(bytesIn, 0, read); bytesRead += read; } zos.closeEntry(); } }
Código desde aquí
-
¿Por qué son necesarios
Properties
?Properties
es un archivo de propiedades. Su estructura: clave – valor. Para trabajar con este tipo de archivos, Java tiene una claseProperties
, se hereda deHashTable<Object, Object>
Hay un artículo sobre cómo manipularlo: ejemplos de archivos de propiedades de Java
-
¿De qué forma se almacenan los datos en el archivo
.properties
?La clave es el significado.
-
¿Es posible cambiar los datos de un objeto
Properties
después de cargarlo desde un archivo?Si se hereda de
HashMap
, entonces podrá hacerlo, solo entonces deberá desscribir los cambios en este archivo. Hay un método para estosetProperty
.Aquí está el código:
import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * Created by Роман on 12.09.2016. */ public class LoadAndSetProperties { public static void main(String[] args) { Properties prop = new Properties(); InputStream input = null; try { input = new FileInputStream("D:\\forJava\\MyArtifactName\\packForTest\\config.properties"); // load a properties file prop.load(input); // get the property value and print it out prop.setProperty("database", "ddfdfdfdfdf"); System.out.print(prop.getProperty("database")); } catch (IOException ex) { ex.printStackTrace(); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
Salida:
ddfdfdfdfdf -
¿ Por qué necesitamos una clase
FileReader
?Documentos Java:
public class FileReader
extends InputStreamReader
Clase de conveniencia para leer archivos de personajes. Los constructores de esta clase asumen que la codificación de caracteres predeterminada y el tamaño del búfer de bytes predeterminado son apropiados. Para especificar estos valores usted mismo, construya un InputStreamReader en un FileInputStream.
FileReader está diseñado para leer secuencias de caracteres.
Clase para leer símbolos de archivos. Los constructores de esta clase asumen que la codificación de caracteres predeterminada y el tamaño del búfer predeterminado son apropiados. Para establecer estos valores usted mismo, debe construir
InputStreamReader
sobreFileInputStream
.FileReader
diseñado para leer secuencias de caracteres. -
¿ Por qué necesitamos una clase
FileWriter
?public class FileWriter
extends OutputStreamWriter
Clase de conveniencia para escribir archivos de caracteres. Los constructores de esta clase asumen que la codificación de caracteres predeterminada y el tamaño del búfer de bytes predeterminado son aceptables. Para especificar estos valores usted mismo, construya un OutputStreamWriter en un FileOutputStream.
El hecho de que un archivo esté disponible o pueda crearse depende de la plataforma subyacente. Algunas plataformas, en particular, permiten que un archivo se abra para escribirlo con un solo FileWriter (u otro objeto de escritura de archivos) a la vez. En tales situaciones, los constructores de esta clase fallarán si el archivo involucrado ya está abierto. FileWriter está diseñado para escribir secuencias de caracteres.
Класс для записи символов файлов. Конструкторы этого класса предполагают, что códigoировка символов дефолтная и дефолтный размер буфера являются приемлемым. Quéбы задать эти значения самостоятельно, следует построить
OutputStreamWriter
надFileOutputStream
. Является ли файл доступен для записи, зависит от используемой платформы. Некоторые платформы разрешают держать файл для записи только однимFileWriter
(o другого un objetoа записи archivo), в одно время.FileWriter
предназначен для записи потоков символов. Для написания потоков необработанных byteов, используйтеFileOutputStream
.Эти классы (
FileReader
иFileWriter
) специально ориентированы для работы с текстом и строками.
DefNeo
Nivel 36
GO TO FULL VERSION