Gostaria que alguém desse uma olhado no programa que fiz com interface gráfica, estou viajando muito ou eh por ai?! Ah, e na utilização das classes e troca de mensagens tb.
O programa, basicamente faz o seguinte:
lê um arquivo txt, e divide ele com o numero de sequencias (grupo de caracteres iniciados por um caracter especial ‘>’) que o usuario quiser. As entradas saum: nome do arquivo e numero de sequencias.
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
public class SplitFasta extends JFrame
implements ActionListener
{
// atributos
private String fileName;
private int numPack;
private JLabel label1, label2;
private JTextField input1, input2;
private JButton botao1;
// metodos
public SplitFasta()
{
setTitle("Split Fasta");
GridBagLayout layout = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.EAST; // alinhamento a direita
getContentPane().setLayout(layout);
label1 = new JLabel("File name:");
input1 = new JTextField("",10);
label2 = new JLabel("Number of sequences for pack:");
input2 = new JTextField("",10);
botao1 = new JButton("Run");
// Configura as propridades de cada componente
// Label 1
c.gridy = 0; // primeira linha
c.gridx = 0; // primeira coluna
layout.setConstraints(label1, c);
getContentPane().add(label1);
// Input 1
c.gridy = 0; // primeira linha
c.gridx = 1; // segunda coluna
layout.setConstraints(input1, c);
getContentPane().add(input1);
// Label 2
c.gridy = 1; // segunda linha
c.gridx = 0; // primeira coluna
layout.setConstraints(label2, c);
getContentPane().add(label2);
// Input 2
c.gridy = 1; // segunda linha
c.gridx = 1; // segunda coluna
layout.setConstraints(input2, c);
getContentPane().add(input2);
// Botao 1
c.gridy = 2; // terceira linha
c.gridx = 0; // primeira coluna
layout.setConstraints(botao1, c);
getContentPane().add(botao1);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
// escutando o botao1
botao1.addActionListener(this);
}
// tratando o evento botao1 acionado
public void actionPerformed(ActionEvent event)
{
fileName = input1.getText().trim();
numPack = Integer.parseInt(input2.getText().trim());
// fasta class
Fasta fasta = new Fasta(fileName, numPack);
}
public static void main(String args[])
{
new SplitFasta();
}
}
class Fasta
{
private String fileName; // recebe o nome do arquivo
private int numPack; // recebe o numero de pacotes por arquivo
private String linha = null; // para ler arquivo
private int counter=0; // contador
private int counterArq=1; // contador para nome dos arquivos gerados
private String paraGravar = ""; // auxiliar que armazena conteudo a ser gravado
public Fasta(String file, int pack)
{
fileName = file;
numPack = pack;
ReadFastaFile(fileName);
}
public void ReadFastaFile(String fileName)
{
try
{
FileReader reader = new FileReader(fileName);
BufferedReader leitor = new BufferedReader(reader);
while((linha = leitor.readLine()) != null)
{
FastaScatter(linha);
}
WriteFastaFile(paraGravar); // para gravar o ultimo do arquivo
leitor.close();
reader.close();
}
catch (IOException e){ e.printStackTrace(); }
}
public void WriteFastaFile(String gravar)
{
try
{
PrintWriter out = new PrintWriter(new
FileWriter(counterArq+fileName));
out.println(gravar);
out.close();
}
catch (IOException exc)
{
System.out.println("Erro de IO");
exc.printStackTrace();
}
counterArq = counterArq+1; // contador para nomes dos arquivos novos
}
public void FastaScatter(String linhaLocal)
{
// recebe o 1o caracter da linha (para verificar se eh '>')
char seqChar = linhaLocal.charAt(0);
// recurso para transformar o char em string
// para poder usar o método equals (objeto String)
String sequenceStr = seqChar+"aki";
if(sequenceStr.equals(">aki")) // inicio na seq '>xxx'
{
counter = counter+1;
// se o arquivo tiver na seq seguinte
// nao grava a linhaLocal pois a local vai ser '>xxx'
if (counter == numPack+1)
{
paraGravar = paraGravar+"
";
WriteFastaFile(paraGravar); // gravando soh o que estava
// na var ateh agora
paraGravar = linhaLocal+"
"; // preenchendo a var com o valor
// atual linhaLocal pois eh o
// inicio do prox arquivo '>xxx'
counter = 1; // coloca o contador em 1 pois a var linhaLocal
// esta com o inicio da proxima seq (prox pacote)
}
// se nao grava a local tb pois vai ser parte da seq
else { paraGravar = paraGravar+"
"+linhaLocal+"
"; }
}
else
{
paraGravar = paraGravar+linhaLocal;
}
}
}
Obrigado,
Rafael.