<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Últimas mensagens do tópico "Metodo para ler arquivo"]]></title>
		<link>http://www.guj.com.br/posts/list/5.java</link>
		<description><![CDATA[Últimas mensagens enviadas no tópico "Metodo para ler arquivo"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Metodo para ler arquivo</title>
				<description><![CDATA[ Fiz um método que escreve em um arquivo sequencial, mas nao estou conseguindo fazer um que busque por um nome de registro. <br /> Lembrando que este arquivo trabalha da seguinte maneira: <br /> Ele pega a data de nascimento % 23, e o resultado entao será a posicao em que gravara o arquivo. Caso algum data coinscida com o resultado que ja tenha um registro, ele passa para o outro bloco (de 23) e grava o registro<br /> Abaixo uns métodos importantes do sistema. O método pesquisarRegistro() está somente o esqueleto, se alguem conseguir me dar um ajuda.<br /> <br /> ContatoRecord.java<br /> [code]<br />         /**<br /> 	 * Retornar o tamanho fixo do registro<br /> 	 * Cada caracter de uma String ocupa 02 bytes<br /> 	 * 60 bytes do nome<br /> 	 * 60 bytes do endereco<br /> 	 * 20 bytes da data de nascimento 99/99/9999<br /> 	 * 26 bytes do telefone (99)9999-9999<br /> 	 * <br /> 	 * @return tamanho do registro<br /> 	 */<br /> 	public static int size()<br /> 	{<br /> 		return 166;<br /> 	}<br /> <br />         public void read(RandomAccessFile file) throws IOException<br /> 	{<br /> 		// Ler o nome do contato<br /> 		setNome(readString(30, file));<br /> 		<br /> 		// Ler o endereco do contato<br /> 		setEndereco(readString(30, file));<br /> 		<br /> 		// Ler a data de nascimento do contato<br /> 		setNascimento(readString(10, file));<br /> 		<br /> 		// Ler o telefone do contato<br /> 		setTelefone(readString(13, file));<br /> <br /> 	}<br /> <br />         private String readString(int tamanho, RandomAccessFile file) throws IOException<br /> 	{<br /> 		// Palavra a ser lida<br /> 		char palavra[] = new char[tamanho];<br /> 		<br /> 		// Caracter lido do arquivo<br /> 		char temp;<br /> 		<br /> 		// Ler 30 caracteres<br /> 		for(int count = 0; count &lt; palavra.length; count++)<br /> 		{<br /> 			// Ler um caracter do arquivo<br /> 			temp = file.readChar();<br /> 			<br /> 			// Concatenar com os caracteres lidos anteriormente<br /> 			palavra[count] = temp;<br /> 		}<br /> <br /> 		// Retornar a palavra lida<br /> 		return new String(palavra).replace('\0', ' ');<br /> 	}<br /> <br />         public void write(RandomAccessFile file) throws IOException<br /> 	{<br /> 		// Gravar o nome do contato<br /> 		writeString(file, getNome(), 30);<br /> 		<br /> 		// Gravar o endereco do contato<br /> 		writeString(file, getEndereco(), 30);<br /> 		<br /> 		// Gravar a data de nascimento do contato<br /> 		writeString(file, getNascimento(), 10);<br /> 		<br /> 		// Gravar o telefone do contato<br /> 		writeString(file, getTelefone(), 13);<br /> 	}<br /> <br />         private void writeString(RandomAccessFile file, String palavra, int tamanho) throws IOException<br /> 	{<br /> 		// Buffer a ser gravado<br /> 		StringBuffer buffer = null;<br /> 		<br /> 		// Setar o valor do buffer<br /> 		if(palavra != null)<br /> 		{<br /> 			buffer = new StringBuffer(palavra);<br /> 		}<br /> 		else<br /> 		{<br /> 			buffer = new StringBuffer(tamanho);<br /> 		}<br /> 		<br /> 		// Padronizar o tamanho da palavra<br /> 		buffer.setLength(tamanho);<br /> 		<br /> 		// Gravar a palavra no arquivo<br /> 		file.writeChars(buffer.toString());<br /> <br /> 	}<br /> [/code]<br /> <br /> ContatoView.java<br /> [code]<br />           private void inserirRegistro() {<br /> 		<br /> 		// Verificar se os campos foram preenchidos<br /> 		if ((this.tfNome.getText() == null)<br /> 				|| (this.tfNome.getText().equals(&quot;&quot;))) {<br /> 			JOptionPane.showMessageDialog(this, &quot;Nome não foi preenchido!&quot;,<br /> 					&quot;Erro&quot;, JOptionPane.ERROR_MESSAGE);<br /> 			return;<br /> 		}<br /> 		if ((this.tfEndereco.getText() == null)<br /> 				|| (this.tfEndereco.getText().equals(&quot;&quot;))) {<br /> 			JOptionPane.showMessageDialog(this, &quot;Endereço não foi preenchido!&quot;,<br /> 					&quot;Erro&quot;, JOptionPane.ERROR_MESSAGE);<br /> 			return;<br /> 		}<br /> 			/*<br /> 			 * else if<br /> 			 * (searchRecord(Integer.parseInt(this.tfMatricula.getText()))){<br /> 			 * JOptionPane.showMessageDialog(this, &quot;Matrícula já cadastrada!&quot;,<br /> 			 * &quot;Erro&quot;, JOptionPane.ERROR_MESSAGE); return; }<br /> 			 */<br /> 		if ((this.tfNascimento.getText() == null)<br /> 				|| (this.tfNascimento.getText().equals(&quot;&quot;))) {<br /> 			JOptionPane.showMessageDialog(this,<br /> 					&quot;Data de Nascimento não foi preenchida!&quot;, &quot;Erro&quot;,<br /> 					JOptionPane.ERROR_MESSAGE);<br /> 			return;<br /> 		} else if(!Data.validaData(this.tfNascimento.getText())){<br /> 			JOptionPane.showMessageDialog(this,<br /> 					&quot;Data de Nascimento inválida!&quot;, &quot;Erro&quot;,<br /> 					JOptionPane.ERROR_MESSAGE);<br /> 			return;<br /> 		}<br /> <br /> 		// Abrir o arquivo<br /> 		try {<br /> 			this.arquivo = new RandomAccessFile(new File(fileName.getName()), &quot;rw&quot;);<br /> 		} catch(FileNotFoundException exception){<br /> 			JOptionPane<br /> 			.showMessageDialog(<br /> 					this,<br /> 					&quot;Não foi possível abrir o arquivo solicitado!&quot;,<br /> 					&quot;Erro&quot;, JOptionPane.ERROR_MESSAGE);<br /> 			return;<br /> 		}<br /> 		<br /> 		// Salvar os registros no arquivo<br /> 		try {<br /> 			<br /> 			// Obter a quantidade de registros da base de dados<br /> 			int quantidadeRegistros = (int) (this.arquivo.length() / ContatoRecord.size());<br /> 			<br /> 			// Obtendo o dia, mes e ano da data de nascimento para gerar a chave<br /> 			String dia = this.tfNascimento.getText().substring(0, 2);<br /> 			String mes = this.tfNascimento.getText().substring(3, 5);<br /> 			String ano = this.tfNascimento.getText().substring(6, 10);<br /> 			<br /> 			// Obter a chave para calcular o hash<br /> 			int chave = Integer.parseInt(dia + mes + ano);<br /> 			<br /> 			// Obter a posicao onde o registro deverá ser salvo<br /> 			int posicaoHash = chave % 23;<br /> 			<br /> 			// Posicionar o pointer do registro no inicio do arquivo<br /> 			this.arquivo.seek(0);<br /> 				<br /> 			// Indicador de que a posicao de inserção foi encontrada<br /> 			boolean procurandoPosicao = true;<br /> 			<br /> 			// Encontrar uma posicao para a insercao do registro<br /> 			for(int bloco = 0; procurandoPosicao; bloco++)<br /> 			{<br /> 				// Posicao a ser analisada<br /> 				int posicaoAnalisada = posicaoHash + (bloco * 23);<br /> 				<br /> 				// Verificar se a posicao analisada é suportada pelo arquivo<br /> 				if(posicaoAnalisada &lt; quantidadeRegistros)<br /> 				{<br /> 					// Posicionar o pointer sobre o registro Hash do bloco atual<br /> 					this.arquivo.seek(posicaoAnalisada * ContatoRecord.size());<br /> 					<br /> 					// Ler o registro corrente<br /> 					String valorCorrente = this.arquivo.readUTF();<br /> 					<br /> 					// Verificar se a posicao esta vaga<br /> 					if((valorCorrente.equals(&quot;0&quot;) ||(valorCorrente.equals(tfNome.getText()))))<br /> 					{<br /> 						// Voltar a posicao lida<br /> 						this.arquivo.seek(posicaoAnalisada * ContatoRecord.size());<br /> 						<br /> 						// Sair do loop de procura<br /> 						procurandoPosicao = false;<br /> 					}<br /> 				}<br /> 				else<br /> 				{<br /> 					// Posicionar o cursor no final do arquivo<br /> 					this.arquivo.seek(this.arquivo.length());<br /> 					<br /> 					// Adicionar registro nulos até a posicao analisada<br /> 					for(int count = quantidadeRegistros; count &lt; posicaoAnalisada; count++)<br /> 					{<br /> 						// Escrever um registro nulo na base de dados<br /> 						this.arquivo.writeInt(0);<br /> 					}<br /> 					<br /> 					// Sair do loop de procura<br /> 					procurandoPosicao = false;<br /> 				}<br /> 			}<br /> 			<br /> 			// Escrever o registro na posicao indicada<br /> 			ContatoRecord newRecord = new ContatoRecord(this.tfNome.getText(),<br /> 					this.tfEndereco.getText(), this.tfNascimento.getText(), <br /> 					this.tfTelefone.getText());<br /> 			// Gravar o aluno na base de dados<br /> 			newRecord.write(this.arquivo);<br /> 			<br /> 		} catch (IOException exception) {<br /> 			JOptionPane.showMessageDialog(this,<br /> 					&quot;Não foi possível salvar o registro no arquivo!&quot;, &quot;Erro&quot;,<br /> 					JOptionPane.ERROR_MESSAGE);<br /> 			return;<br /> 		}<br /> <br /> 		// Limpar o formulario e avisar o usuario de que o registro foi salvo<br /> 		// com sucesso<br /> 		this.tfNome.setText(&quot;&quot;);<br /> 		this.tfEndereco.setText(&quot;&quot;);<br /> 		this.tfNascimento.setText(&quot;&quot;);<br /> 		this.tfTelefone.setText(&quot;&quot;);<br /> 		JOptionPane.showMessageDialog(this, &quot;Registro salvo com sucesso!&quot;,<br /> 				&quot;Informação&quot;, JOptionPane.INFORMATION_MESSAGE);<br /> <br /> 		// Fechar o arquivo<br /> 		try {<br /> 			this.arquivo.close();<br /> 		} catch (IOException exception) {<br /> 			JOptionPane<br /> 					.showMessageDialog(<br /> 							this,<br /> 							&quot;Não foi possível fechar o arquivo após salvar o registro!&quot;,<br /> 							&quot;Erro&quot;, JOptionPane.ERROR_MESSAGE);<br /> 			return;<br /> 		}<br /> 	}<br /> [/code]<br /> <br /> [code]<br />         /**<br /> 	 * Metodo responsavel pela busca dos registros na base de dados<br /> 	 */<br /> 	private void pesquisarRegistro() {<br /> 		// Perguntar o nome do contato desejado<br /> 		String resultado = JOptionPane.showInputDialog(this, &quot;Nome&quot;,<br /> 				&quot;Pesquisar&quot;, JOptionPane.QUESTION_MESSAGE);<br /> <br /> 		// Verificar se o usuario forneceu algum nome de contato<br /> 		if ((resultado == null) || (resultado.equals(&quot;&quot;))) {<br /> 			return;<br /> 		} else {<br /> 			<br /> 			// Abrir o arquivo<br /> 			try {<br /> 				this.arquivo = new RandomAccessFile(new File(fileName.getName()), &quot;rw&quot;);<br /> 			} catch(FileNotFoundException exception){<br /> 				JOptionPane<br /> 				.showMessageDialog(<br /> 						this,<br /> 						&quot;Não foi possível abrir o arquivo solicitado!&quot;,<br /> 						&quot;Erro&quot;, JOptionPane.ERROR_MESSAGE);<br /> 				return;<br /> 			}<br /> 			<br /> 			boolean encontrou = false;<br /> 			<br /> 			try {<br /> 			<br /> 				// Obter a quantidade de registros da base de dados<br /> 				int quantidadeRegistros = (int) (this.arquivo.length() / ContatoRecord.size());<br /> 				<br /> 				// Obter a posicao onde o registro deverá ser lido<br />                                 // Aqui eu teria que pelo nome saber qual a data de nascimento para calcular a posicao do registro<br /> 				int posicaoHash = ????? % 23;<br /> 				<br /> 				// Posicionar o pointer do registro no inicio do arquivo<br /> 				this.arquivo.seek(0);<br /> <br /> 				// Pesquisar em todos os blocos do arquivo<br /> 				for(int bloco = 0; true; bloco++)<br /> 				{<br /> 					// Posicao a ser analisada<br /> 					int posicaoAnalisada = posicaoHash + (bloco * 23);<br /> <br /> 					// Verificar se a posicao analisada é suportada pelo arquivo<br /> 					if(posicaoAnalisada &lt; quantidadeRegistros)<br /> 					{<br /> 						// Posicionar o pointer sobre o registro Hash do bloco atual<br /> 						this.arquivo.seek(posicaoAnalisada * ContatoRecord.size());<br /> 						<br />                                                 // Aqui eu teria que buscar os nomes e guardar em nomeCorrente para comparar com o resultado<br /> 						String nomeCorrente = &quot;&quot;;<br /> 						<br /> 						// Verificar se o registro foi encontrado<br /> 						if(nomeCorrente.equals(resultado))<br /> 						{<br /> 							encontrou = true;<br /> 							break;<br /> 						}<br /> 					}<br /> 				}<br /> 			} catch(Exception exception){<br /> 				// Fim da leitura de dados<br /> 				exception.printStackTrace();<br /> 				return;<br /> 			}<br /> 			<br /> 			// Limpar o formulario e avisar o usuario de que o registro foi salvo com sucesso<br /> 			this.tfNome.setText(&quot;&quot;);<br /> 			if(encontrou)<br /> 			{<br /> 				JOptionPane.showMessageDialog(this, &quot;Registro localizado!&quot;, &quot;Informação&quot;, JOptionPane.INFORMATION_MESSAGE);<br /> 			}<br /> 			else<br /> 			{<br /> 				JOptionPane.showMessageDialog(this, &quot;Registro não localizado!&quot;, &quot;Erro&quot;, JOptionPane.ERROR_MESSAGE);<br /> 			}<br /> 			<br /> 			// Fechar o arquivo<br /> 			try<br /> 			{<br /> 				this.arquivo.close();<br /> 			}<br /> 			catch(IOException exception)<br /> 			{<br /> 				JOptionPane.showMessageDialog(this, &quot;Não foi possível fechar o arquivo após pesquisar os registros!&quot;, &quot;Erro&quot;, JOptionPane.ERROR_MESSAGE);<br /> 				return;<br /> 			}<br /> 			<br /> 		}<br /> <br /> 	}<br /> [/code]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/195407/981185/metodo-para-ler-arquivo
</guid>
				<link>http://www.guj.com.br/prepost/195407/981185/metodo-para-ler-arquivo
</link>
				<pubDate><![CDATA[Wed, 19 Nov 2008 13:13:09]]> GMT</pubDate>
				<author><![CDATA[ laurinha2004PJ]]></author>
			</item>
			<item>
				<title>Re:Metodo para ler arquivo</title>
				<description><![CDATA[ Oie,<br /> <br /> Eu dei uma solução meio "feia" em outro topico entao vou dar uma mais bunitinha agora! :p<br /> <br /> Primeiro eu te segiro melhorar o codigo criando uma classe Pessoa, que armazena as info que vc quer.<br /> Depois vc cria uma classe HashTable que trata a colição como vc descreveu ai em cima.<br /> <br /> Faça ambas as classes serializable. Acho que assim seu código fica melhor organizado.<br /> <br /> Espero ter ajudado.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/195407/981235/remetodo-para-ler-arquivo
</guid>
				<link>http://www.guj.com.br/prepost/195407/981235/remetodo-para-ler-arquivo
</link>
				<pubDate><![CDATA[Fri, 28 Nov 2008 13:22:49]]> GMT</pubDate>
				<author><![CDATA[ jdPJ]]></author>
			</item>
	</channel>
</rss>
