11
votes

Accéder aux fichiers dans un dossier spécifique dans la classe de classe utilisant Java

Je veux lire un tas de fichiers texte dans le package COM.Example.Resources. Je peux lire un seul fichier à l'aide du code suivant:

BufferedReader br = new BufferedReader(new InputStreamReader(MyObject.class.getResourceAsStream("resources")));
String fileName;
while((fileName = br.readLine()) != null){ 
   // access fileName 
}


3 commentaires

Je souhaite accéder aux fichiers dans CLASSPATH et non à partir d'un dossier spécifique comme C: \\ Ressources.


Peut-être que vous voulez ceci: Stackoverflow.com/Questtions/3923129/...


Vous pouvez réutiliser le code pour cette (après une petite modification) Stackoverflow.com/questions/176527/...


3 Réponses :


0
votes

Je pense que c'est ce que vous voulez:

String currentDir = new java.io.File(".").toURI().toString();
// AClass = A class in this package
String pathToClass = AClass.class.getResource("/packagename).toString();
String packagePath = (pathToClass.substring(currentDir.length() - 2));

String file;
File folder = new File(packagePath);
File[] filesList= folder.listFiles(); 

for (int i = 0; i < filesList.length; i++) 
{
  if (filesList[i].isFile()) 
  {
    file = filesList[i].getName();
    if (file.endsWith(".txt") || file.endsWith(".TXT"))
    {
      // DO YOUR THING WITH file
    }
  }
}


2 commentaires

Comment planifiez-vous obtenez objet à partir du nom du package chaîne ?


J'ai essayé dossier de fichier = nouveau fichier ("/ com / exemple / ressources") et je lance nullpointerexception



3
votes

Ceci alors thread Discutez de cette technique en détail. Vous trouverez ci-dessous une méthode Java utile qui répertorie les fichiers d'un dossier de ressources donné.

/**
   * List directory contents for a resource folder. Not recursive.
   * This is basically a brute-force implementation.
   * Works for regular files and also JARs.
   * 
   * @author Greg Briggs
   * @param clazz Any java class that lives in the same place as the resources you want.
   * @param path Should end with "/", but not start with one.
   * @return Just the name of each member item, not the full paths.
   * @throws URISyntaxException 
   * @throws IOException 
   */
  String[] getResourceListing(Class clazz, String path) throws URISyntaxException, IOException {
      URL dirURL = clazz.getClassLoader().getResource(path);
      if (dirURL != null && dirURL.getProtocol().equals("file")) {
        /* A file path: easy enough */
        return new File(dirURL.toURI()).list();
      } 

      if (dirURL == null) {
        /* 
         * In case of a jar file, we can't actually find a directory.
         * Have to assume the same jar as clazz.
         */
        String me = clazz.getName().replace(".", "/")+".class";
        dirURL = clazz.getClassLoader().getResource(me);
      }

      if (dirURL.getProtocol().equals("jar")) {
        /* A JAR path */
        String jarPath = dirURL.getPath().substring(5, dirURL.getPath().indexOf("!")); //strip out only the JAR file
        JarFile jar = new JarFile(URLDecoder.decode(jarPath, "UTF-8"));
        Enumeration<JarEntry> entries = jar.entries(); //gives ALL entries in jar
        Set<String> result = new HashSet<String>(); //avoid duplicates in case it is a subdirectory
        while(entries.hasMoreElements()) {
          String name = entries.nextElement().getName();
          if (name.startsWith(path)) { //filter according to the path
            String entry = name.substring(path.length());
            int checkSubdir = entry.indexOf("/");
            if (checkSubdir >= 0) {
              // if it is a subdirectory, we just return the directory name
              entry = entry.substring(0, checkSubdir);
            }
            result.add(entry);
          }
        }
        return result.toArray(new String[result.size()]);
      } 

      throw new UnsupportedOperationException("Cannot list files for URL "+dirURL);
  }


0 commentaires

10
votes

Si vous passez dans un répertoire à la méthode getresourceastream , il retournera une liste de fichiers dans le répertoire (ou au moins un flux de celui-ci). XXX < P> J'ai volontairement utilisé le fil pour obtenir la ressource car cela garantira que je reçois le chargeur de classe des parents. Ceci est important dans un environnement Java EE mais probablement pas trop pour votre cas.


1 commentaires

Bonjour, j'essaie d'utiliser votre réponse. Pouvez-vous m'aider avec ça: Stackoverflow.com/Questtions/29430113/... ?