Passa ai contenuti principali

Splitter.java classe per dividere file

Potrebbe tornare utile poter dividere file troppo grandi in parti piccole, creare cioè un programma che faccia lo splitting.
Split: Utilizziamo un file input stream bufferizzato per poter leggere interi blocchi del file. Dato un file di una certa dimensione per conoscere il numero di blocchi che ci serviranno basta prendere la parte alta del quoziente tra le dimensioni. Creiamo infine un array per contenere un intero blocco di byte del file. Infine con un ciclo for scomponiamo il file in file più piccoli chiamati nomefile.
Join: capito come fare la fase di split, il join risulta molto più semplice. Conoscendo il numero di blocchi basta un ciclo for per ricomporre il file iniziale.
Ecco il codice sorgente:

/**
* Splitter.java
* classe che splitta e fa il join
* @author Giuseppe Caliendo
* @version 1.0
*/

import java.io.*;
import java.util.*;
public class Splitter{
/**
* Costruttore della classe Splitter.java
*/
public Splitter() {}
/**
* splitta il file in file di dimension bytes
* @param String filename file da splittare
* @param dimension dimensione dei blocchi splittati
*/
public void split(File f, int dimension) throws IOException{
BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));//stream di lettura
long fbytes = f.length(); //dimensione del file da splittare
int numBlocchi = (int)Math.ceil((double)fbytes/dimension);//numero blocchi data
byte
[] blocco = new byte[dimension];//buffer per leggere
int i; //contatore blocchi
for
(i=0; i < style="color: rgb(204, 102, 204);">1; i++){//primi blocchi: ciclo di lettura - scrittura
in.read(blocco,0,blocco.length);//leggo e metto in blocco
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(f+''+i));
out.write(blocco); //scrivo il file di out e chiudo
out.close();
}
//ultimo blocco
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(f+''+i));
int
amount = in.read(blocco,0,blocco.length);//numero id bytes effetivi nell'ultimo blocco
in.read(blocco,0,amount);
out.write(blocco,0,amount);
out.close();[color=green]//chiudo i flussi
in.close();
}

/**
* metodo per riassemblare il file
* @param String primoFile path del primo file
* @param int numFile numero di file da riassemblare
*/

public
void join(File primoFile, int numFile) throws IOException{
String path = primoFile.getPath();//path del primo file
String target = path.substring(0,path.length()-1); //file taget
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(target));
for
(int i=0; i){//ciclo su tutti i file
File f = new File(target+''+i);
BufferedInputStream in = new BufferedInputStream(new FileInputStream(target+''+i));
int dim = (int)f.length();
byte
[] blocco = new byte[dim];
in.read(blocco);
out.write(blocco);
in.close();
}
out.close();
}
}

Post popolari in questo blog

Se excel non aggiorna le formule

Oggi in ufficio è capitata una richiesta particolare. In un documento excel dopo aver eseguito un copia-incolla di una formula non si aggiornavano i risultati nelle celle interessate. Dopo attimi di perplessità dal fondo dell'ufficio il capo ci illumina con una funzione ai più sconosciuta e che ha risolto il problema: il tasto F9. Scusate la mia ignoranza in excel ma questo blog è pensato proprio per appuntare esperienze di vita informatica. Tutto sta nel fatto che i "calcolatori d'un tempo" non disponevano di una adeguata potenza di calcolo e nelle operazioni di copia-incolla si verificavano lunghe attese per l'aggiornamento. La soluzione adottata da MS è stata quella di inserire un'opzione per impedire l'aggiornamento automatico e forzarlo con una combinazione di tasti... il tasto F9!
Combinazioni utili per il calcolo delle formule F9 = calcola le formule modificate dall'ultimo calcolo in tutte le cartelle e fogli di lavoro aperte. MAIUSC + F9 = c…

Riflessioni sull'ordinamento

Gli algoritmi di ordinamento sono da sempre i più gettonati e interessanti dal punto di vista didattico (si veda la complessità computazionale) e funzionale (quasi tutti i programmi hanno almeno una funzione di ricerca). Proprio di questi giorni sono alcuni articoli di Programmazione.it dedicati a questo tema (link).Coding Horror in questo articolo presenta una provocazione molto interessante al di là delle opinioni personali:

The default sort functions in almost every programming language are poorly
suited for human consumption.
L'articolo pone l'attenzione sulla differenza tra l'ordinamento alfanumerico e quello ASCII solitamente usato nei metodi nativi dei linguaggi. Il discorso si ampia se poi pensiamo banalmente alla differenza tra Windows e GNU/Linux che è case sensitive.
Spesso i sistemi operativi e i linguaggi di programmazione realizzano ordinamenti rispettando l'ordine della tabella di codifica ASCII e non l'ordinamento naturale della lingua. I commenti a se…

Timeline dei Linguaggi di programmazione

O'Reilly ha reso disponibile per tutti gli appassionati un interessante poster in formato pdf in cui vengono riassunti 50 anni di storia dei linguaggi di programmazione.Il poster mostra una timeline colorata nella quale sono evidenziate le principali derivazioni tra i vari linguaggi... da vedere
http://www.oreilly.com/news/graphics/prog_lang_poster.pdf



fonte programmazione.it