estou precisando editar um arquivo de configuração pelo meu código java mas nao estou conseguindo… toda vez q eu vou escrever usando o PrintWriter ele apaga tudo e depois escreve…
…o que eu preciso é o seguinte, eu tenho esse trecho no arquivo:
Nome: fulano
Email xxxx
Telefone: 111111
e eu queria que ele editasse no arquivo soh pra ficar:
le o arquivo e grava novamente, controla ele com o cara chamado
String tokenizer… da uma olhada!!!
T
thingol
Dica: se você puder mudar o formato do arquivo de configuração para XML ou Properties, é mais fácil depois trabalhar com eles. Vou dar um exemplo para um arquivo Properties:
nome=Joaquim José da Silva Xavier
email=[email removido]
telefone=([telefone removido]
Para ler o arquivo properties, você usa “load”, para gravar o arquivo properties, você usa “save”, e para modificar uma “property”, você usa “setProperty”. Veja a documentação da classe java.util.Properties e veja como é fácil.
B
bz1
thingol:
Dica: se você puder mudar o formato do arquivo de configuração para XML ou Properties, é mais fácil depois trabalhar com eles. Vou dar um exemplo para um arquivo Properties:
nome=Joaquim José da Silva Xavier
email=[email removido]
telefone=([telefone removido]
Para ler o arquivo properties, você usa “load”, para gravar o arquivo properties, você usa “save”, e para modificar uma “property”, você usa “setProperty”. Veja a documentação da classe java.util.Properties e veja como é fácil.
hmm, gostei muito dessa api, soh estou tendo problemas na hora de editar o arquivo, pois ele bagunça tudo, eu ja tenho um arquivo de configuracao todo pronto, soh queria editar uma linha nele, tem como fazer isso facil?
T
thingol
O properties realmente põe as coisas fora de ordem, porque ele usa internamente um HashMap (não um LinkedHashMap), e ele remove os comentários que você pôs. Eu tenho uma classe que pode ser usada em lugar de java.util.Properties, e que mantém os comentários e a ordem dos dados.
importjava.io.*;importjava.text.*;importjava.util.*;/** * Esta classe pode ser usada em lugar de java.util.Properties e aceita o mesmo formato de arquivos.* Entretanto, ela preserva os comentários lidos, assim como a ordem das chaves.*/publicclassPropriedadesimplementsMap{/** String "#" */privatestaticfinalStringHASH="#";/** Contém o mapa */privateMapmap=newLinkedHashMap();/** Contém os defaults */privatePropertiesdefaults=null;/** Formato das chaves */privateNumberFormatnformat=newDecimalFormat("00000");/** * Creates an empty property list with no default values. */publicProperties(){}/** * Creates an empty property list with the specified defaults. * @param pDefaults the defaults. */publicProperties(PropertiespDefaults){defaults=pDefaults;}/** * @see java.util.Map#size() */publicintsize(){returnmap.size();}/** * @see java.util.Map#clear() */publicvoidclear(){map.clear();}/** * @see java.util.Map#isEmpty() */publicbooleanisEmpty(){returnmap.isEmpty();}/** * @see java.util.Map#containsKey(java.lang.Object) */publicbooleancontainsKey(Objectkey){returnmap.containsKey(key);}/** * @see java.util.Map#containsValue(java.lang.Object) */publicbooleancontainsValue(Objectvalue){returnmap.containsValue(value);}/** * @see java.util.Map#values() */publicCollectionvalues(){returnmap.values();}/** * @see java.util.Map#putAll(java.util.Map) */publicvoidputAll(MappMap){map.putAll(pMap);}/** * @see java.util.Map#entrySet() */publicSetentrySet(){returnmap.entrySet();}/** * @see java.util.Map#keySet() */publicSetkeySet(){returnmap.keySet();}/** * @see java.util.Map#get(java.lang.Object) */publicObjectget(Objectkey){returnmap.get(key);}/** * @see java.util.Map#remove(java.lang.Object) */publicObjectremove(Objectkey){returnmap.remove(key);}/** * @see java.util.Map#put(java.lang.Object, java.lang.Object) */publicObjectput(Objectkey,Objectvalue){returnmap.put(key,value);}/** * @see java.util.Properties#getProperty(java.lang.String) */publicStringgetProperty(Stringkey){Objectobj;Propertiesprop=this;while(true){obj=prop.get(key);if(obj==null&&prop.getDefaults()!=null){prop=prop.getDefaults();}else{break;}}return(String)obj;}/** * @see java.util.Properties#getProperty(java.lang.String, java.lang.String) */publicStringgetProperty(Stringkey,StringdefaultValue){Objectobj;Propertiesprop=this;while(true){obj=prop.get(key);if(obj!=null){break;}elseif(prop.getDefaults()!=null){prop=prop.getDefaults();}else{obj=defaultValue;break;}}return(String)obj;}/** * @return defaults */PropertiesgetDefaults(){returndefaults;}/** * @see java.util.Properties#propertyNames() */publicIteratorpropertyNames(){SetpropertyNamesSet=newLinkedHashSet();for(Iteratorit=map.keySet().iterator();it.hasNext();){Objectkey=it.next();if(keyinstanceofString&&!((String)key).startsWith(HASH)){propertyNamesSet.add(key);}}if(defaults!=null){for(Iteratorit=defaults.keySet().iterator();it.hasNext();){Objectkey=it.next();if(keyinstanceofString&&!((String)key).startsWith(HASH)){propertyNamesSet.add(key);}}}returnpropertyNamesSet.iterator();}/** * Lê uma lista de propriedades (pares chave=valor) da stream de entrada. * A stream deve usar a codificação ISO-8859-1, isto é, * cada byte é um caracter Latin-1. * * A sintaxe é ligeiramente diferente de java.util.Properties * e os comentários são preservados na leitura, embora as chaves sejam "#0001", "#0002" etc. para essas linhas. * Não se pode usar \ para escapar caracteres, o separador * chave/valor é sempre "=" e as linhas não podem ser continuadas. * O comentário é sempre começado por "#" ou "!". Preservamos também as linhas em branco. * É efetuado "trim" em todas as linhas, portanto não há como pôr espaços no fim das linhas. * Se algum dado for incluído neste "properties", será no final (devido ao * uso de LinkedHashMap). * Se uma linha não for um par "chave=valor", usando o sinal de igual, * ela será armazenada como se fosse um comentário, mas não será possível * obtê-la como chave (pois não tem valor). * @see java.util.Properties#load(java.io.InputStream) */publicvoidload(InputStreaminStream)throwsIOException{BufferedReaderbreader=newBufferedReader(newInputStreamReader(inStream,"ISO-8859-1"));Stringline;intnComentario=0;intpos;map.clear();while(true){line=breader.readLine();if(line==null){break;}line=line.trim();pos=line.indexOf('=');if(line.length()==0||line.startsWith(HASH)||line.startsWith("!")||pos==-1){map.put(HASH+nformat.format(++nComentario),line);}else{Stringkey=line.substring(0,pos);Stringvalue="";if(pos+1<line.length()){value=line.substring(pos+1);}map.put(key,value);}}breader.close();}/** * @see java.util.Properties#store(java.io.OutputStream, java.lang.String) */publicvoidstore(OutputStreamout,Stringheader)throwsIOException{PrintWriterpwriter=newPrintWriter(newBufferedWriter(newOutputStreamWriter(out)));if(header!=null){pwriter.println("# "+header);pwriter.println("# "+(newDate()).toString());}for(Iteratorit=map.entrySet().iterator();it.hasNext();){Map.Entryentry=(Map.Entry)it.next();Stringkey=(String)entry.getKey();Stringvalue=(String)entry.getValue();if(key.startsWith(HASH)){pwriter.println(value);}else{pwriter.println(key+"="+value);}}pwriter.println();pwriter.close();}/** * @see java.util.Properties#list(java.io.PrintStream) */publicvoidlist(PrintStreamout){for(Iteratorit=map.entrySet().iterator();it.hasNext();){Map.Entryentry=(Map.Entry)it.next();Stringkey=(String)entry.getKey();Stringvalue=(String)entry.getValue();if(!key.startsWith(HASH)){out.println(key+"="+value);}}out.println();out.close();}/** * @see java.util.Properties#list(java.io.PrintWriter) */publicvoidlist(PrintWriterout){PrintWriterpwriter=out;for(Iteratorit=map.entrySet().iterator();it.hasNext();){Map.Entryentry=(Map.Entry)it.next();Stringkey=(String)entry.getKey();Stringvalue=(String)entry.getValue();if(!key.startsWith(HASH)){pwriter.println(key+"="+value);}}pwriter.println();pwriter.close();}}