Carregar valores a partir de um arquivo txt

8 respostas
renatomattos2912

boa tarde

tenho uma variavel q recebe varias palavras separadas por virgula, o codigo fica meio poluido pq sao muitas palavras, eu queria transferir as palavras para um arquivo txt e no meu codigo apenas receber este txt na variavel, deixando o codigo mais limpo e jogando a sujeira no txt, como seria uma maneira elegante de fazer isso?? existe alguma outra forma melhor de resolver o mesmo problema?

Obs: eu não tenho q ler o txt como se fosse um csv, os valores são separados por virgula mas eu tenho q ler eles por completo e não uma palavra de cada vez como eu faria em um csv, eu quero o bloco de texto inteiro sendo recebido pela variavel.

Obrigado

8 Respostas

rafaduka

poderia mostrar como este codigo esta “sujo” hoje?

renatomattos2912

claro, segue abaixo:

public void buscaJson(Result result, String q, String f1) throws NullPointerException{
		result.use(Results.json())
		.withoutRoot()
	    .from(busca(q, f1))
	    .exclude("datacad","flgatv","usulog","al1a4","al5a8","al9fin","al9ini","alcreche","alec","alee","aleja1a4",
	    		"aleja5a8","alejaem","alem","alpre","alprof","altele1a4","altele5a8","alteleem","ano_base","avaliacao",
	    		"baiesc","be_mensalidade_max","be_mensalidade_min","bilingue","caixaposta","categ","cdrede","ceppostal",
	    		"cl1a4","cl5a8","cl9fin","cl9ini","clcreche","clec","clee","clef8ef9mult","clef8fluxo","clef8mult",
	    		"clef9fluxo","clef9mult","cleiefmultietapa","cleja1a4","cleja5a8","clejaem","clem","clpre","clprof",
	    		"cltele1a4","cltele5a8","clteleem","clunif","cod_dir","cod_esc","codcoord","coddist","codesc",
	    		"codescmec","codmun","codreg","complend","cursos_profissio","ddd","de","depadm","descricao",
	    		"distr","ef1_mensalidade_max","ef1_mensalidade_min","ef2_mensalidade_max","ef2_mensalidade_min",
	    		"em_mensalidade_max","em_mensalidade_min","email","estado","excurric","facebook","fax",
	    		"fone1","fone2","if_mensalidade_max","if_mensalidade_min","infra","linguas","nec_especial",
	    		"nomedep","nomesc","profissio","setor","site","tipoesc","total_alunos","twitter","zonamec")
	    .serialize();
	}

quero migrar toda esta parte dentro do exclude para um arquivo txt, para deixar o codigo da classe q contem este metodo mais limpo e facilitar a vizualização de todas essas palavras

cbaldin

Amigo, você quer escrever um arquivo e recuperar os valores para passar no exlude, ou esse arquivo vai ser fixo e vc só vai ir lendo os valores dele ?

renatomattos2912

O arquivo sera fixo, só vou pegar o texto ja escrito ae dentro do exclude e jogar num txt, só irei ler este arquivo depois, o unico ganho q quero é visual, pra evitar poluir meu codigo visualmente com tantas strings, poderei usar esta logica para outras partes do meu sistema tmb, mas por enquanto estou focado nessa.

cbaldin

Cara acredito que essa seja a forma mais facil de ler um arquivo.

Scanner scanner = new Scanner(main.class.getResourceAsStream("texto.txt")); //o argumento "texto.txt" seria o caminho do seu arquivo.  

	while(scanner.hasNext()) { //enquanto ainda tem linhas no arquivo
		scanner.next(); // aqui voce vai lendo cada linha, vai adicionando em lista, argumento do jeito q vc achar melhor.
	}

imagine q o arquivo que vc criou tem que ser (uma palavra por linha) nesse estilo

datacad
flgatv
usulog
al1a4
al5a8…

Não sei se consegui esclarecer tudo, mas acho que já é uma guia.

Qlquer coisa to aki, vlw

renatomattos2912

cbaldin:
Cara acredito que essa seja a forma mais facil de ler um arquivo.

Scanner scanner = new Scanner(main.class.getResourceAsStream("texto.txt")); //o argumento "texto.txt" seria o caminho do seu arquivo.  

	while(scanner.hasNext()) { //enquanto ainda tem linhas no arquivo
		scanner.next(); // aqui voce vai lendo cada linha, vai adicionando em lista, argumento do jeito q vc achar melhor.
	}

imagine q o arquivo que vc criou tem que ser (uma palavra por linha) nesse estilo

datacad
flgatv
usulog
al1a4
al5a8…

Não sei se consegui esclarecer tudo, mas acho que já é uma guia.

Qlquer coisa to aki, vlw

Entendi, é dessa forma eu ja tinha feito, mas eu queria evitar pois ele le linha por linha, seria como ler um csv mesmo, nao entendo muito bem mas acredito q isso vai dar uma diminuida na performance, talvez seja melhor eu criar uma classe com uma variavel String em final e gravar la e ae chamo a variavel onde eu precisar, o q acha?

cbaldin

Então, se forem só esses valores não acredito que performance seja um problema, até porque são poucos valores, se você ainda quiser utilizar arquivo (txt csv etc…) e se preocupar com performance ao invés de usar Scanner tente usar Stream (FileInputStream) que é mais rapido que o Scanner, mas tem menos funcionalidades.

Mas esse é um problema que pode ser resolvido de várias formas.

O mesmo problema pode ser resolvido com um final static String que foi a forma que você sugeriu.

Também pode ser resolvido com Enum.

Se esses valores não forem utilizados em mais nenhum lugar e vc não precisar identificar um a um deles, ou seja, só trabalhar com eles nesse bloco. Você pode utilizar eles como um bloco de instancia (nem lembro o nome certo) mas é aquele {} que coloca logo dps da classe.

Diante de todas essas soluções acredito que a melhor idéia é utilizar o que deixa esse monte de string mais escondida possível, pra tentar limpar o máximo possível o código.

renatomattos2912

exatamente, vou dar uma testada nas soluções, obrigado pela ajuda

Criado 14 de janeiro de 2013
Ultima resposta 14 de jan. de 2013
Respostas 8
Participantes 3