[RESOLVIDO] acessar diretorio dentro de um jar

Olá pessoal,

Estou com um problema

A minha app copia alguns arquivos para uma pasta que eu escolher…
vamos supor…

os arquivos estão nesse dir itens/(qualquer nome)

eu nao quero pegar os arquivos de dentro, alias, eu quero… só que antes eu tenho q saber quantos e quais sao eles… pra fazer o for pra copiar…

ate aí tudo bem, meu codigo funciona quando eu rodo no netbeans… quando eu gero o .jar ele nao funciona…

o caminho que eu passo pro File é “src/itens/” só que esse src só existe quando meu projeto está no “netbeansprojects”… ao gerar o jar essa pasta srs some

para diretorio o getResource nao funciona…

e ja nao sei mais o que fazer…

se alguem puder me ajudar, ficaria mto grata

:wink:

Tens o código ai?
Pode postá-lo para que possamos ver?

Tenta assim…

InputStream ras = this.class.getResourceAsStream("/testebla/Insi.java");

E também tenta não duplicar tópicos…

hmmm… eu nao quero o arquivo… eu quero o diretorio…

[code]File arquivos[];
File diretorio = new File(“src/itens/main/”);
arquivos = diretorio.listFiles();

[/code]

como pegar arquivos eu sei…

 File diretorio = new File("src/itens/main/");  
        diretorio.mkdir();

será q assim ajuda em algo?

att,

como acessar arquivos dentro do diretório:

http://www.guj.com.br/java/231382-apos-gerar-jar-nao-encontra-mais-as-imagens-e-nem-os-html-que-estao-dentro-da-aplicacao/2#1189662
http://www.guj.com.br/java/38033-acessar-arquivos-txt-dentro-de-um-jar
http://www.guj.com.br/java/30001-acessar-arquivo-de-dentro-de-um-jar
http://www.guj.com.br/java/32880-arquivo-texto-dentro-do-jar
http://www.guj.com.br/java/225019-acessar-arquivo-jpeg-pelo-jar
http://www.guj.com.br/java/184441-tutorial–como-acessar-arquivos-do-seu-jar
http://www.guj.com.br/java/83268-arquivo-dentro-de-jar
http://www.guj.com.br/java/145541-leitura-e-execucao-de-arquivo-dentro-do-jar

acho q não muda mt coisa para acessar o diretório.

att,

entao pedruhenrik,

eu nao quero criar o diretorio, eu quero acessar um diretorio que ja existe e saber quais sao os arquivos que estao dentro dele…

opa… vou dar uma olhada nesses topicos…

desculpa postar de novo…
mas esses são sobre arquivos e muda sim

não da pra usar getResource para pegar diretorio

da nullpointer quando eu tento listar o que tem dentro dele…

A classe File permite que você instancie um objeto indicando um diretório.
Quando eu preciso pegar o diretório onde o jar se encontra, apenas crio o objeto desta forma?

File f = new File(".");

Assim, independente de onde esteja o jar, você consegue identificar o diretório onde o mesmo se encontra.

Huummmmm pegar os diretorios…

Como o drsmachado disse pega o diretorio atual do seu jar e depois pega o teu jar e usa o ZipFile para ler…Só não sei se será possivel mais é uma idéia…

entao…
onde o jar está eu ja pego de boa…

eu pesquisei sobre essa tal de ZipFile… li na api sobre ela

mas nao entendi como funciona

vcs fazem alguma ideia?

olha… para você adicionar arquivos dentro de um arquivo .jar você precisa das classes do pacote java.zip… no outro tópico que você criou relativo a mesma coisa, você não disse que queria inserir arquivos neste diretório, isso eu nunca fiz, eu ja até li arquivos dentro do jar mas nunca escrevi estes arquivos… para ler você pode usar o getResourceAsStream ao invés do método getResource.

se o seu problema é esse, ler além de escrever, ai acho que a melhor forma é o seu diretório ser externo sim (você não pode alterar nada no arquivo jar enquanto ele estiver sendo executado). Se o diretório em questão for diferente entre uma máquina e outra, deixe o endereço em questão dentro de um arquivo interno, um de extensão .properties por exemplo, leia este properties para pegar o endereço do diretório e trabalhe com o endereço em questão… não é uma solução perfeita por que exige que a cada máquina que o endereço seja diferente você abra o arquivo .jar, o .properties dentro dele e altere o endereço, mas é a melhor solução que eu consegui pensar agora…

e não duplique tópicos…

eu nao quero inserir nem alterar nada… eu só quero localizar um “D-I-R-E-T-O-R-I-O” e listar os arquivos q estao nele…
e depois copia-los…

eu SEI usar getResource pra arquivos… ja disse N vezes…

eu preciso de algo q me retorne os diretorios, nao arquivos…

entao, eu paro de “duplicar topicos” quando postarem coisas relativas com a minha duvida… ja postaram muitas vezes a mesma resposta pra lidar com arquivos e eu ja disse q nao é arquivo… entao se nao souber como me ajudar tudo bem

mas se alguem souber como achar DIRETORIOS eu ficarei grata!

Quanto mais clara for tua pergunta e, quanto mais informações você passar sobre tua dificuldade, mais simples e direto será para encontrar respostas.
Há sim, muitas respostas parecidas e que não atendem à tua necessidade.
Cada um que respondeu, dentro do objetivo do fórum, está tentando ajudar, então, por gentileza, não precisa tratar com grosseria, ok?
Duplicar tópicos não ajuda muito, geralmente são os mesmos que irão ler e, eventualmente, responder às questões.

Se você quer listar os diretórios de um determinado local, bem, primeiro pegue o array de arquivos do mesmo e, fazendo um if simples, verifique se ele é ou não um diretório (utilizando o método isDirectory() ou mesmo o isFile()).

http://download.oracle.com/javase/1.4.2/docs/api/java/io/File.html
http://www.jexamples.com/srchRes/java.io.File.isDirectory

eu ja fiz esse tipo de coisa… e nao me retorna nada…

e eu tentei nao ser grossa… mas é q alguns tentam ajudar… outros parecem q querem responder a mesma coisa… duplicar respostas pode?

a coisa é… eu joguei um monte de arquivo dentro do meu projeto… e quando eu rodo ele… quero copiar esses arquivos pra uma pasta do meu desktop…
explicando de uma maneira simples…

eu poderia copiar arquivo por arquivo… usando isso q vcs todos ja me disseram… mas se eu adicionar um arquivo… ja ferrou, pq meu codigo ta hardcoded…

por isso quero pegar o dir… listar os arquivos, e dai sim num for copia-los…

tudo isso eu ja procurei… procurei no guj, em outros lugares, ate em ingles… e nao encontrei nada referente a diretorios, somente arquivos…
se isso nao puder ser feito, eu faço hard coded… mas se tiver como eu gostaria de saber…

package files;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class FileCopy {
    public static void main(String[] args) {
        try {
            copy("Diretorio_de_origem", "diretorio_destino");
        } catch (IOException e) {
            System.err.println(e.getMessage());
        }
    }

    public static void copy(String fromFileName, String toFileName) throws IOException {
        File ex = new File(fromFileName);
//pega a lista dos arquivos
        File[] o = ex.listFiles();
//itera sobre os arquivos do diretorio
        for (File fd : o) {
            File fromFile = fd;
            File toFile = new File(toFileName + "\" + fromFile.getName());
//verifica se trata-se de arquivo ou diretorio
            if (fromFile.isFile()) {
//caso seja arquivo, realiza a cópia

                if (!fromFile.exists())
                    throw new IOException("FileCopy: " + "no such source file: " + fromFileName);
                if (!fromFile.isFile())
                    throw new IOException("FileCopy: " + "can't copy directory: " + fromFileName);
                if (!fromFile.canRead())
                    throw new IOException("FileCopy: " + "source file is unreadable: " + fromFileName);

                if (toFile.isDirectory())
                    toFile = new File(toFile, fromFile.getName());

                if (toFile.exists()) {
                    if (!toFile.canWrite())
                        throw new IOException("FileCopy: " + "destination file is unwriteable: " + toFileName);
                    System.out.print("Overwrite existing file " + toFile.getName() + "? (Y/N): ");
                    System.out.flush();
                    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
                    String response = in.readLine();
                    if (!response.equals("Y") && !response.equals("y"))
                        throw new IOException("FileCopy: " + "existing file was not overwritten.");
                } else {
                    String parent = toFile.getParent();
                    if (parent == null)
                        parent = System.getProperty("user.dir");
                    File dir = new File(parent);
                    if (!dir.exists())
                        throw new IOException("FileCopy: " + "destination directory doesn't exist: " + parent);
                    if (dir.isFile())
                        throw new IOException("FileCopy: " + "destination is not a directory: " + parent);
                    if (!dir.canWrite())
                        throw new IOException("FileCopy: " + "destination directory is unwriteable: " + parent);
                }

                FileInputStream from = null;
                FileOutputStream to = null;
                try {
                    from = new FileInputStream(fromFile);
                    to = new FileOutputStream(toFile);
                    byte[] buffer = new byte[4096];
                    int bytesRead;

                    while ((bytesRead = from.read(buffer)) != -1)
                        to.write(buffer, 0, bytesRead); // write
                } finally {
                    if (from != null)
                        try {
                            from.close();
                        } catch (IOException e) {
                            ;
                        }
                    if (to != null)
                        try {
                            to.close();
                        } catch (IOException e) {
                            ;
                        }
                }
            }
        }
    }
}

Vamos lá jLady.

Você quer ler quais e quantos arquivos tem num determinado diretorio dentro do jar da sua aplicação que está em execução, correto?

Pois bem, se de fato for isso como eu entendi.

Faça assim:

String nomedoJar = "Infortunio"; String caminhoDoSeuJar = System.getProperty("user.dir")+System.getProperty("file.separator")+nomedoJar+".jar";

Logo com este caminho poderá ler seu jar usando o ZipFile como lhe disse anteriormente, assim:

[code] try {
ZipFile zipFile = new ZipFile(caminhoDoSeuJar);

		Enumeration<? extends ZipEntry> entries = zipFile.entries();

		while (entries.hasMoreElements()) {
			ZipEntry zipEntry = (ZipEntry) entries.nextElement();
			String name = zipEntry.getName();
			if (!zipEntry.isDirectory() && name.contains("plugins")){
				System.out.println(name);
			}
		}
	} catch (IOException e1) {
		e1.printStackTrace();
	}[/code]

Com esse codigo perceba que procuro somente a pasta plugins

Bom o restante é facil e tu sabes…
[color=red]
OBS:[/color] Importante lembrar que isso somente funcionara se voce tiver rodando apartir do jar, se não recebera o FileNotFoundException por o jar nao ter sido criado.
E caso deseja observar o System.out.println() chame o jar pelo Prompt de Comando do Windows (cmd) com esse comando: java -jar nomedoJar.jar

KamikazeBr ,

OBRIGADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!!!
funcionou, lindo e maravilhoso!!!
vc salvou minha alma!!!

:wink: