Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [Java]Che funzioni posso inserire in un file splitter?

    Fra qualche giorno posterò il sorgente, quando sarà completo e testato (con grafica), ma vorrei sapere, secondo voi, oltre alla divisione e unione dei file cosa potrebbe fare?

    Sempre qualcosa di relativo al tipo di funzione che fino ad ora svolge, ovvio.

    Io pensavo che una idea potrebbe essere quella di criptare i "pezzi di file" con una chiave a N bit e poi, decriptarli in fase di unione con la chiave data dalla persona che vuole unirli. Così che se le chiavi non combaciano il file non è utilizzabile. (ovviamente non sarebbe una cosa obbligatoria quella della criptatura).

    Altra idea potrebbe essere quella della compressione delle varie parti, sempre a richiesta.

    Giudicate utili le idee qui sopra?

    Che altro potrei inventarmi?


    Questo programma di per se non troppo utile mi servirebbe per sperimentare e per imparare nuove cose in java, creando qualcosa che cmq, potrebbe essere utile.

    Grazie!

  2. #2
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    Qualche idea:
    • permettere di scegliere la dimensione dei pezzi
    • aggiungere un codice di controllo tipo checksum per verificare che i singoli pezzi siano integri (come ad esempio fanno i programmi di compressione)


    Svegliati, Neo. Matrix ti possiede...

  3. #3
    non lo ho postato prima perchè mancavano alcune cose, ora posto il sorgente e spero in qualche vostra idea.

    c'è qualche modo per ottimizzare un po' il codice, soprattutto nella parte grafica???

    grazie


    FileSplitter.java (classe astratta estesa da JoinFile e SplitFile)

    codice:
    import java.io.File;
    
    public abstract class FileSplitter{
    	public static int BUF_SIZE = 4096;
    	public static final String EXTENSION = ".part";
    	protected String pathIn;
    	protected String pathOut;
    	
    	/**costruttore completo della classe
    	 *@param pathInput path del file di input
    	 *@param pathOutput path del file di output
    	 */
    	public FileSplitter(String pathInput,String pathOutput){
    		pathIn=pathInput;
    		pathOut=pathOutput;
    	}//costruttore
    	
    	/**la funzione ritorna un esito in base all' esistenza o meno del file
    	 *@param nomeFile  nome del file da valutare
    	 *@return esito
    	 */
    	public static boolean fileExists(String nomeFile){
               return (new File(nomeFile)).exists();
    	}//fileExists
    	
    	/**la funzine ritorna le dimensioni del file indicato
    	 *@param nomeFile nome del file di cui si vogliono sapere le dimensioni
    	 *@return dimensioni del file in byte
    	 */
    	public static long fileSize(String nomeFile){
    		return (new File(nomeFile)).length();
    	}
    
    	//usata solo in fase debug
    	public void println(char[] c){
    		System.out.println(c);
    	}
    }

    JoinFile.java
    codice:
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.IOException;
    import java.io.File;
    
    public class JoinFile extends FileSplitter{
        private String nomeFileOut;
        
        
    	/**Costruttore completo
    	 *@param nomeOut nome file di output
    	 *@param pathIn path file input 
    	 *@param pathOut path file output
    	 */
    	public JoinFile(String nomeOut,String pathIn,String pathOut){
    		super(pathIn,pathOut);
    		nomeFileOut=nomeOut;
    	}//costruttore
    	
    	public void join() throws IOException{
    		int numFile=0,car;
    		BufferedInputStream in= new BufferedInputStream(null,BUF_SIZE);
    		BufferedOutputStream out= new BufferedOutputStream(new FileOutputStream(pathOut+nomeFileOut),BUF_SIZE);
            
             while(fileExists(pathIn+numFile+EXTENSION)){
             	in = new BufferedInputStream(new FileInputStream(pathIn+numFile+EXTENSION),BUF_SIZE);
             	while((car=in.read())!=-1)
             	   out.write(car);
             	numFile++;
             	in.close();
             }//end while
            
          out.flush();
          out.close();   
    	}//join
    }//JoinFile

    SplitFile.java
    codice:
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.IOException;
    import java.io.File;
    
    public class SplitFile extends FileSplitter{
    	private String nomeFileIn;
    	
    	
    	/**Costruttore completo
    	 *@param nomeIn nome file di input
    	 *@param pathIn path file input 
    	 *@param pathOut path file output
    	 */
    	 public SplitFile(String nomeIn,String pathIn,String pathOut){
    	 	super(pathIn,pathOut);
    		nomeFileIn=nomeIn;
    	 }//costruttore
    	
    	
    	public void split(long splitSize) throws IOException{
    		 int car;
    		 int i=0,numFile=0; 
             BufferedInputStream in =new BufferedInputStream( new FileInputStream(pathIn+nomeFileIn),BUF_SIZE);
             BufferedOutputStream out=  new BufferedOutputStream(new FileOutputStream(pathOut+numFile+EXTENSION),BUF_SIZE);
             
             while((car=in.read())!=-1){
             	
               if(i>=splitSize){
                  i=0;
                  out.flush();
                  out.close();
                  numFile++;
                  out =   new BufferedOutputStream(new FileOutputStream(pathOut+numFile+EXTENSION),BUF_SIZE);
               }//end if
               out.write(car);
               i++;
             }
             out.flush();
             in.close();
             out.close();
    	}//split
    	
    }//SplitFile


    Segue post 2>>>

  4. #4
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.