¿Cómo almacenar la lista de archivos y carpetas en la lista o configurar usando Java?
Tengo un código de retorno para recuperar una lista de todas las rutas de archivo dentro de un directorio, pero solo obtengo el contenido de la última carpeta. Tengo dos carpetas, cada una tiene 3 archivos.
Aquí está mi código:
import java.io.*;
import java.util.*;
class Filedirexts
{
public static void main(String[] args) throws IOException
{
String Dirpath = "E:/Share/tstlpatches";
String fieldirpath ="";
File file = new File(Dirpath);
List<String> strfilelst = new ArrayList<String>();
strfilelst = Filedirexts.getsubdir(file);
System.out.println(strfilelst.size());
for(int i=0;i<strfilelst.size();i++)
{
fieldirpath = strfilelst.get(i);
System.out.println("fieldirpath : "+fieldirpath);
}
}
public static List<String> getsubdir(File file) throws IOException
{
File[] filelist = file.listFiles();
List<String> strfileList = new ArrayList<String>();
System.out.println("filelist" + filelist.length);
for (int i=0; i< filelist.length ; i++)
{
if(filelist[i].exists())
{
if(filelist[i].isFile())
{
file = filelist[i];
System.out.println( " fileeach file : "+fileeach.getAbsolutePath());
strfileList.add(file.getAbsolutePath());
}
else if (filelist[i].isDirectory())
{
file = filelist[i];
System.out.println( " fileeach Directory : "+fileeach.getCanonicalPath());
strfileList = Filedirexts.getsubdir(file);
strfileList.add(file.getCanonicalPath().toString());
}
}
}
return strfileList;
}
}
Esta es mi estructura de carpetas: MainPath E:\Share\tstlpatches que se usa en el propio código
E:\Share\tstlpatches\BE
E:\Share\tstlpatches\BE\graphical
E:\Share\tstlpatches\BE\graphical\data1.txt
E:\Share\tstlpatches\BE\graphical\data2.txt
E:\Share\tstlpatches\BE\graphical\data3.txt
E:\Share\tstlpatches\BE\test
E:\Share\tstlpatches\BE\test.txt
E:\Share\tstlpatches\BE\test.txt
E:\Share\tstlpatches\BE\test\readme.txt
Solo obtengo
E:\Share\tstlpatches\BE
E:\Share\tstlpatches\BE\test
E:\Share\tstlpatches\BE\test.txt
E:\Share\tstlpatches\BE\test.txt
E:\Share\tstlpatches\BE\test\readme.txt
Si uso el método normal, funciona bien, pero cuando lo uso con la lista, solo obtengo los contenidos de last carpeta.
¿Qué debo hacer para que el código funcione correctamente?
------------Respuesta------------
Su método recursivo está creando incorrectamente una nueva ArrayList
Aquí se explica cómo solucionarlo:
1) Cambie getsubdir para que sea nulo y pase la lista como parámetro.
public static void getsubdir(File file, List<String> strfileList) throws IOException
{
File[] filelist = file.listFiles();
System.out.println("filelist " + filelist.length);
for (int i=0; i< filelist.length ; i++)
{
if(filelist[i].exists())
{
if(filelist[i].isFile())
{
file = filelist[i];
System.out.println( " fileeach file : "+file.getAbsolutePath());
strfileList.add(file.getAbsolutePath());
}
else if (filelist[i].isDirectory())
{
file = filelist[i];
System.out.println( " fileeach Directory : "+file.getCanonicalPath());
// Note: Since you want the directory first in the list,
// add it before the recursive call
strfileList.add(file.getCanonicalPath().toString());
Filedirexts.getsubdir(file, strfileList);
}
}
}
}
2) Cambia la forma en que lo llamas desdeprincipal:
En lugar de:
strfilelst = Filedirexts.getsubdir(file);
Solo usa:
Filedirexts.getsubdir(file, strfilelst);
Etiquetas: file-handling file-io java
Artículos relacionados:
java: no se pueden enviar correos usando el servidor smtp-javamail
mongoose - Cómo obtener datos de una colección creada dinámicamente en mongoDB
- arduino uno - motor paso a paso nema 17 controlado por controlador l298n
- jquery - Decodificación & en una url javascript adjunta
- Extraer información del usuario de tweets usando Python
- java: el trabajo de transmisión de Spark se atasca si el desplazamiento de tiempo de algunos nodos de Kafka no está sincronizado
- asp.net - Cómo iterar a través de campos de formulario usando jQuery/Javascript
- node.js - Angular 2: Error no detectado: nombre de atributo HTML ilegal: * ngfor
- javascript: obtenga la primera letra para el primero de varios apellidos en la lista que comienza con esa letra
- mongodb - Pymongo devuelve valores solo como lista
- amp html - ¿Es posible usar un CDN alternativo para AMP ya que ampproject.org está bloqueado en China?
- java - ¿Cuándo y cómo se usan org.neo4j.graphdb y org.neo4j.driver?
- javascript - React Webcam - Tomar problemas de captura de pantalla
- reactjs - La salida de React no responde
- rendimiento: problema de Matlab con una gran cantidad de datos. Los datos de vibración tienen una longitud de 3 millones de filas
- ¿Cuál es la diferencia práctica entre el enlace bidireccional y el comportamiento del enlace bidireccional en Aurelia?
- ¿Cómo obtener errores de SQL Server Trigger en PHP?
Artículos calientes
- medicina china para la bronquitis
- Diferencia entre infección de las vías respiratorias superiores y bronquitis
- ¿Qué causa la epididimitis?
- Criterios diagnósticos de cálculos renales
- ¿Qué medicamento la masturbación causa prostatitis?
- ¿Cuáles son los factores de padecer gota?
- Qué comer durante la convalecencia de una hemorragia cerebral
- que es el alzheimer
- Principales criterios diagnósticos de las bronquiectasias
- ¿Cuáles son las formas de prevenir y tratar la menstruación irregular en las mujeres?
- Síntomas de gota de ternera
- Saco gestacional de 5x4mm cuanto dura el embarazo
- La diferencia entre espinillas y espinillas de ácaros
- Por qué frotar con jengibre puede tratar la caída del cabello
- ¿Cuánto tiempo se puede vivir con insuficiencia hepática?