FileSplitterGUI.java
codice:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JFileChooser;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JLabel;
import javax.swing.border.TitledBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import java.io.IOException;
import java.io.File;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class FileSplitterGUI extends JFrame{
private Container sfondo;
private JPanel panTot;
private JPanel split;
private JPanel join;
private JPanel dimSplit;
private JPanel fileIn;
private JPanel outPathSplit;
private JPanel eseguiSplit;
private JPanel firstFile;
private JPanel outName;
private JPanel outPath;
private JPanel eseguiJoin;
private JButton dividi;
private JButton unisci;
private JButton sfogliaNomeDividi;
private JButton sfogliaNomeUnisci;
private JButton sfogliaPathUnisci;
private JButton sfogliaPathDividi;
private JTextField sizeFile;
private JTextField pathOutputDividi;
private JTextField nomeFileDividi;
private JTextField nomeFirstUnisci;
private JTextField nomeOutputUnisci;
private JTextField pathOutputUnisci;
private JComboBox size;
private JComboBox molt;
private JLabel primoFile;
private JLabel nomeOut;
private JLabel pathOut;
public static final long B=1;;
public static final long KB=B*1024;
public static final long MB=KB*KB;
/**Costruttore della classe*/
public FileSplitterGUI(){
setSize(500,600);
setTitle("File splitter/joiner");
setDefaultCloseOperation(EXIT_ON_CLOSE);
//imposto lo sfondo
sfondo = getContentPane();
/*******************************************************************************
************** INIZIO IMPOSTAZIONI PANNELLI *******************/
panTot = new JPanel();//pannello che contiene tutto
panTot.setLayout(new GridLayout(2,1));
split = new JPanel();//pannello per la funzione di split
split.setLayout(new GridLayout(4,1));
split.setBorder(new TitledBorder(new EtchedBorder(),"Split"));
join = new JPanel();//pannelo per la funzione di join
join.setLayout(new GridLayout(4,1));
join.setBorder(new TitledBorder(new EtchedBorder(),"Join"));
outPathSplit= new JPanel();
outPathSplit.setBorder(new TitledBorder(new EtchedBorder(),"Cartella di output"));
dimSplit = new JPanel();//pannello per il dimensionamento dell'output
fileIn = new JPanel();//pannnello scelta file da dividere
fileIn.setBorder(new TitledBorder(new EtchedBorder(),"File da splittare"));
eseguiSplit = new JPanel();//pannello con pulsante esecuzione split
firstFile = new JPanel();//pannello scelta primo file serie da unire
outName = new JPanel();//pannello contenente nome file output
outPath = new JPanel();//pannello path file output
eseguiJoin = new JPanel();//pannello con pulsante esecusione join
/********************* FINE IMPOSTAZIONE PANNELLI ***********************/
/*******************************************************************************
************** INIZIO IMPOSTAZIONI BOTTONI *******************/
dividi = new JButton("Dividi file");
dividi.addActionListener(new GestoreSplit());
unisci = new JButton("Unisci file");
unisci.addActionListener(new GestoreJoin());
sfogliaNomeDividi = new JButton("Apri");
sfogliaNomeDividi.addActionListener(new GestoreRicerca());
sfogliaNomeUnisci = new JButton("Sfoglia");
sfogliaNomeUnisci.addActionListener(new GestoreRicerca());
sfogliaPathUnisci = new JButton("Cerca");
sfogliaPathUnisci.addActionListener(new GestoreRicerca());
sfogliaPathDividi = new JButton("Trova");
sfogliaPathDividi.addActionListener(new GestoreRicerca());
/************** FINE IMPOSTAZIONI BOTTONI *******************/
/*******************************************************************************
************** INIZIO IMPOSTAZIONI LABEL *******************/
primoFile = new JLabel("Primo file",SwingConstants.LEFT);
nomeOut = new JLabel("Nome file output",SwingConstants.LEFT);
pathOut = new JLabel("Path file output",SwingConstants.LEFT);
/************** FINE IMPOSTAZIONI LABEL *******************/
/*******************************************************************************
************** INIZIO IMPOSTAZIONI COMBO BOX *******************/
size = new JComboBox();
size.addItem("Dimensione file");
size.addItem("N° parti");
size.addActionListener(new AscoltatoreComboBox());
molt = new JComboBox();
molt.addItem("byte");
molt.addItem("Kbyte");
molt.addItem("Mbyte");
/************** FINE IMPOSTAZIONI COMBO BOX *******************/
/*******************************************************************************
************** INIZIO IMPOSTAZIONI TEXT FIELD *******************/
sizeFile = new JTextField(10);
nomeFileDividi = new JTextField(25);
nomeFileDividi.setEditable(false);
nomeFirstUnisci = new JTextField(15);
nomeFirstUnisci.setEditable(false);
nomeOutputUnisci = new JTextField(10);
pathOutputDividi = new JTextField(25);
pathOutputDividi.setEditable(false);
pathOutputUnisci = new JTextField(25);
pathOutputUnisci.setEditable(false);
/************** FINE IMPOSTAZIONI TEXT FIELD *******************/
/*******************************************************************************
************** INIZIO RIEMPIMENTO SPLIT *******************/
dimSplit.add(size,"West");
dimSplit.add(sizeFile,"Center");
dimSplit.add(molt,"East");
fileIn.add(nomeFileDividi,"West");
fileIn.add(sfogliaNomeDividi,"East");
outPathSplit.add(pathOutputDividi);
outPathSplit.add(sfogliaPathDividi);
eseguiSplit.add(dividi,"Center");
split.add(fileIn);
split.add(dimSplit);
split.add(outPathSplit);
split.add(eseguiSplit);
/************** FINE RIEMPIMENTO SPLIT *******************/
/*******************************************************************************
************** INIZIO RIEMPIMENTO JOIN *******************/
firstFile.add(primoFile,"West");
firstFile.add(nomeFirstUnisci,"Center");
firstFile.add(sfogliaNomeUnisci,"East");
outName.add(nomeOut,"West");
outName.add(nomeOutputUnisci,"East");
outPath.add(pathOut,"West");
outPath.add(pathOutputUnisci,"Center");
outPath.add(sfogliaPathUnisci,"East");
eseguiJoin.add(unisci,"Center");
join.add(firstFile);
join.add(outName);
join.add(outPath);
join.add(eseguiJoin);
/*************** FINE RIEMPIMENTO JOIN *******************/
panTot.add(split,"North");
panTot.add(join,"South");
sfondo.add(panTot);
setVisible(true);
}//costruttore
public static void main(String [] args){
FileSplitterGUI finestra= new FileSplitterGUI();
}//main
class AscoltatoreComboBox implements ActionListener{
public void actionPerformed(ActionEvent e){
if((String)size.getSelectedItem()=="Dimensione file")
molt.setEnabled(true);
else
molt.setEnabled(false);
}//actionPerformed
}//AscoltatoreComboBox
class GestoreRicerca implements ActionListener{
public void actionPerformed(ActionEvent e){
JFileChooser scelta= new JFileChooser();
File file;
if(e.getActionCommand()=="Cerca" || e.getActionCommand()=="Trova")
scelta.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
if(scelta.showOpenDialog(null)==JFileChooser.APPROVE_OPTION){
file = scelta.getSelectedFile();
if(e.getActionCommand()=="Apri")
nomeFileDividi.setText(file.getPath());
else
if(e.getActionCommand()=="Sfoglia")
nomeFirstUnisci.setText(file.getPath());
else
if(e.getActionCommand()=="Trova")
pathOutputDividi.setText(file.getPath());
else
pathOutputUnisci.setText(file.getPath());
}
}//actionPerformed
}//GestorePulsante
class GestoreSplit implements ActionListener{
public void actionPerformed(ActionEvent e){
File file= new File(nomeFileDividi.getText());
SplitFile split=new SplitFile(nameFile(nomeFileDividi),pathFileIn(nomeFileDividi),pathFileOut(pathOutputDividi));
try{
if(size.getSelectedIndex()==0){//dimensione file
if(molt.getSelectedIndex()==0)
split.split(calcSize(B));
else
if(molt.getSelectedIndex()==1)
split.split(calcSize(KB));
else
split.split(calcSize(MB));
}else
split.split(sizeFile(nomeFileDividi)/calcSize(B)+sizeFile(nomeFileDividi)%calcSize(B));
}catch(IOException ex){
JOptionPane.showMessageDialog(null,"Errore di apertura del file \""+nameFile(nomeFileDividi)+"\".\nControllare"+
" se il percorso e il nome file sono corretti e se il supporto"+
" è inserito correttamente.");
}
}
}//GestoreSplit
class GestoreJoin implements ActionListener{
public void actionPerformed(ActionEvent e){
JoinFile join=new JoinFile(nameFile(nomeOutputUnisci),pathFileIn(nomeFirstUnisci),pathFileOut(pathOutputUnisci));
try{
join.join();
}catch(IOException ex){
JOptionPane.showMessageDialog(null,"Errore di apertura di uno dei file di input.\nControllare"+
" se il percorso è corretto e se il supporto"+
" è inserito correttamente.");
}
}
}//GestoreJoin
public long calcSize(long molt){
return molt*Long.parseLong(sizeFile.getText());
}//calcSize
public String pathFileIn(JTextField in){
File f=new File(in.getText());
return ((f.getPath()).split(f.getName()))[0];
}
public String nameFile(JTextField f){
File file= new File(f.getText());
return file.getName();
}
public long sizeFile(JTextField s){
File file= new File(s.getText());//
return file.length();
}
public String pathFileOut(JTextField out){
String s = out.getText();
if(s.charAt(s.length()-1)=='\\')
return s;
else
return s+"\\";
}
}//PoliNGUI