Hace un tiempo me hice esta clase, espero te sirva la el método inTrim(), saludos
import javax.swing.*;
import java.io.*;
import javax.swing.JFileChooser.*;
import javax.swing.filechooser.FileFilter;
public class ZString {
public ZString(){
}
String getFile(String[] exts, String dir, String description){
/**
*
* Obtiene la ruta de un archivo, dada una lista de extensiones
* de la forma:
*
* ".ext"
*
* El segundo argumento asigna una ruta
* como directorio inicial, donde se mostrara
* el cuadro de dialogo abrir como
*
* El tercer argumento asigna un valor de referencia
* para el usuario que vera el cuadro de dialogo,
* por ejemplo:
*
* "Archivos de texto plano"
*
*
*/
txtFilter txf = new txtFilter();
txf.extensions = exts;
txf.desc = description;
JFileChooser jfc = new JFileChooser();
jfc.setFileFilter(txf);
jfc.setCurrentDirectory(new File(dir));
int res=jfc.showOpenDialog(null);
if(res==jfc.APPROVE_OPTION){
return jfc.getSelectedFile().toString();
}else{
return "No se seleccionó ningun archivo";
}
}
String inTrim(String s){
/**
* Elimina el exceso de espacios dada una cadena de caracteres
*
* Retorna: Cadena la cadena de caracteres recibida
* sin espacios al principio ni al final y
* cada palabra separada solo de un espacio
*
* Si se recibe un salto de linea el utltimo caracter de
* una linea sera separado de la siguiente linea
* solo por un salto de linea y no un espacio mas
* un salto de linea
*
*/
String out="";
String arr[] = s.split(" ");
boolean init = true;
for(String val:arr){
if(init&&!val.equals("")){
out+=val;
init=false;
}else if (!val.equals("")){
out+=" "+ val;
}
}
return out.replace("\n ", "\n");
}
void show(String s){
JOptionPane.showMessageDialog(null, s);
}
int txtCount_words(String file){
/**
* Dada la ruta de un archivo de texto plano
* devuelve el numero de palabras
* encontradas en ese acrchivo.
*
*
*/
String a="", in="";
try{
BufferedReader bf = new BufferedReader(new FileReader(new File(file)));
while(a!=null){
a=bf.readLine();
if (a!=null){
in+=a + " ";
}
}
}catch(FileNotFoundException FEX){
}catch(IOException IOEX){
}
String tin = (String) (new ZString()).inTrim(in);
String[] ing = tin.split(" ");
if(new ZString().txtCount_chars(file)==0){
return 0;
}else{
return ing.length;
}
}
void writer(String[] args, String file, boolean rewrite, boolean delete_on_exit){
/**
*
* El primer argumento indica
* las palabras que se agregaran al archivo de
* texto plano.
*
* El segundo argumento indica la ruta de
* dicho archivo.
*
* Si el tercer argumento
* es true el archivo
* se sobreescribe
*
* Si el cuarto argumento es true
* el archivo se borra al cerrar
* el programa
*
*
*/
String[] in=this.reader(file).split("\n");
Writer w=new Writer(file, delete_on_exit);
if(rewrite){
w.touch();
}else{
for(String val:in){
w.write(val);
}
}
for(String val:args){
w.write(val);
}
w.close();
}
int txtCount_chars(String f){
/**
* Dada la ruta de un archivo de texto plano
* devuelve el numero de caracteres
* encontrados en ese acrchivo.
*
* No se cuentan espacios
* ni saltos de linea
*
*/
String a="", in="";
try{
BufferedReader bf = new BufferedReader(new FileReader(new File(f)));
while(a!=null){
a=bf.readLine();
if (a!=null){
in += a;
}
}
}catch(FileNotFoundException FEX){
}catch(IOException IOEX){
}
return (new ZString()).noSpace(in).length();
}
public String reader(String file){
/**
* Dada la ruta de un archivo de texto plano,
* devuelve el contenido de dicho archivo
*
*
*/
String out="";
String a="";
try{
BufferedReader r=new BufferedReader(new FileReader(new File(file)));
while(a!=null){
a=r.readLine();
if(a!=null){
out+=a + "\n";
}
}
}catch(FileNotFoundException fnfEX){
JOptionPane.showMessageDialog(null, "El archivo especificado no existe");
}catch(IOException ex){
}
return out;
}
String noSpace(String s){
/**
*
* Dado un String retorna el mismo String
* Sin espacios
*
*/
String out="";
String[] in = s.split(" ");
for(String val:in){
out+=val;
}
return out;
}
String getTxtFile(){
/**
*
* Abre un cuadro de dialogo abrir...
* Devuelve la ruta del archivo especificado en esa
* ruta, si se presiona cancelar, no se tomaran acciones.
*
* (Queda a criterio)
*
*/
String file="";
JFileChooser jfc = new JFileChooser();
jfc.setCurrentDirectory(new File(System.getProperty("user.home") + "\\Desktop"));
jfc.setApproveButtonText("Analizar");
jfc.setMultiSelectionEnabled(false);
txtFilter f=new txtFilter();
jfc.setFileFilter(f);
int returnval = jfc.showDialog(jfc, "Analizar...");
if (returnval==jfc.APPROVE_OPTION){
file=jfc.getSelectedFile().toString();
}
return file;
}
}
class txtFilter extends FileFilter{
String[] extensions = {".txt", ".bat", ".vbs", ".js"};
String desc = "Plain txt files |*.txt |*.bat | *.vbs |*.js";
txtFilter(){
}
public boolean accept(File f){
boolean a=false;
if(f.isDirectory()){
return true;
}
for (String val:extensions){
if (f.toString().endsWith(val)){
a=true;
break;
}else{
a=false;
}
}
return a;
}
public String getDescription(){
return desc;
}
}
class Writer {
java.io.BufferedWriter bw;
String file="";
Writer(String foo, boolean delete){
this.file=foo;
try{
File f = new File(this.file);
if(delete){
f.deleteOnExit();
}
bw=new BufferedWriter(new FileWriter(f));
}catch(IOException ex){
}
}
public void write(String line){
try{
bw.append(line);
bw.newLine();
}catch (IOException ex) {
ex.printStackTrace();
}
}
public void touch(){
/**
** Vacia el archivo con el cual se construyo este objeto
** o lo crea si no existe
**/
File f = new File(this.file);
try{
if(f.exists()){
f.delete();
f.createNewFile();
}else{
f.createNewFile();
}
}catch(IOException c){
}
}
public void touch(String foo){
/***
* Vacia el archivo dado
*
* Si el archivo no existe se crea
*
* Si el String recibido no es una ruta valida
* se lanzara IOException, se captura aqui mismo,
* las acciones a tomar en ese caso quedan a criterio.
* En este metodo el catch esta vacio
*
* NOTA: Las rutas de archivos se separan con "\",
* "\" es un caracter especial para java, para no tener problemas con esto,
* se usa "\\" para denotar dicho caracter
*
*
***/
try{
File fi= new File(foo);
if(fi.exists()){
fi.delete();
fi.createNewFile();
}else{
fi.createNewFile();
}
}catch(IOException c){
}
}
public void close(){
try{
this.bw.close();
}catch(IOException ex){
}
}
}