Skip to content

Instantly share code, notes, and snippets.

@devniel
Created October 6, 2014 18:24
Show Gist options
  • Select an option

  • Save devniel/2aee470f6d42cd5dc1eb to your computer and use it in GitHub Desktop.

Select an option

Save devniel/2aee470f6d42cd5dc1eb to your computer and use it in GitHub Desktop.
Writing an file using UTF-8 without BOM encoding
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Shell;
public class LimpiezaRunnable implements Runnable {
public Shell shell;
public Display display;
public String fileFilterPath;
public String fileName;
public String fileExtension;
public String filePath;
public Label labelMensajePrincipal;
public Label labelMensajeSecundario;
public LimpiezaCompletaListener listener;
public ProgressBar progressBar;
public Shell getShell() {
return shell;
}
public void setShell(Shell shell) {
this.shell = shell;
}
public LimpiezaCompletaListener getListener() {
return listener;
}
public void setListener(LimpiezaCompletaListener listener) {
this.listener = listener;
}
public String getFileFilterPath() {
return fileFilterPath;
}
public void setFileFilterPath(String fileFilterPath) {
this.fileFilterPath = fileFilterPath;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFileExtension() {
return fileExtension;
}
public void setFileExtension(String fileExtension) {
this.fileExtension = fileExtension;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public Display getDisplay() {
return display;
}
public void setDisplay(Display display) {
this.display = display;
}
public ProgressBar getProgressBar() {
return progressBar;
}
public void run() {
try {
BufferedReader br;
BufferedWriter writer = null;
BufferedWriter writer2 = null;
// Leer archivo
br = new BufferedReader(new InputStreamReader(new FileInputStream(
filePath), "UTF-8"));
final Integer lines = this.countLines(filePath);
this.display.syncExec(new Runnable() {
@Override
public void run() {
progressBar.setMaximum(lines);
}
});
// Preparar creación de archivo de resultado
writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(fileFilterPath + "/" + fileName
+ "_LIMPIO" + fileExtension), "UTF-8"));
// Preparar creación de archivo de log
writer2 = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(fileFilterPath + "/" + fileName
+ "_LOG_LIMPIEZA" + fileExtension), "UTF-8"));
String line = br.readLine();
int i = 0;
boolean sw = false;
if(line.startsWith("\uFEFF")){
System.out.println(line.charAt(0));
line = line.substring(1);
}
while (line != null) {
String tmpline = line.substring(27,67);
if (tmpline.contains("Ä")) {
writer2.write("Reemplazado caracteres Ä en la línea " + i);
writer2.newLine();
}
String cleaned_line = tmpline.replace("Ä", "A");
if (cleaned_line.contains("Å")) {
writer2.write("Reemplazado caracteres Å en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("Å", "A");
if (cleaned_line.contains("É")) {
writer2.write("Reemplazado caracteres É en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("É", "E");
if (cleaned_line.contains("Ö")) {
writer2.write("Reemplazado caracteres Ö en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("Ö", "O");
if (cleaned_line.contains("Ü")) {
writer2.write("Reemplazado caracteres Ü en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("Ü", "U");
if (cleaned_line.contains("Ñ")) {
writer2.write("Reemplazado caracteres Ñ en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("Ñ", "N");
if (cleaned_line.contains("Á")) {
writer2.write("Reemplazado caracteres Á en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("Á", "A");
if (cleaned_line.contains("Â")) {
writer2.write("Reemplazado caracteres  en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("Â", "A");
if (cleaned_line.contains("À")) {
writer2.write("Reemplazado caracteres À en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("À", "A");
if (cleaned_line.contains("Ã")) {
writer2.write("Reemplazado caracteres à en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("Ã", "A");
if (cleaned_line.contains("Ë")) {
writer2.write("Reemplazado caracteres Ë en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("Ë", "E");
if (cleaned_line.contains("È")) {
writer2.write("Reemplazado caracteres È en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("È", "E");
if (cleaned_line.contains("Ì")) {
writer2.write("Reemplazado caracteres Ì en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("Ì", "I");
if (cleaned_line.contains("Ó")) {
writer2.write("Reemplazado caracteres Ó en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("Ó", "O");
if (cleaned_line.contains("Ò")) {
writer2.write("Reemplazado caracteres Ò en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("Ò", "O");
if (cleaned_line.contains("Ú")) {
writer2.write("Reemplazado caracteres Ú en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("Ú", "U");
if (cleaned_line.contains("Û")) {
writer2.write("Reemplazado caracteres Û en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("Û", "U");
if (cleaned_line.contains("Ù")) {
writer2.write("Reemplazado caracteres Ù en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("Ù", "U");
if (cleaned_line.contains("Ý")) {
writer2.write("Reemplazado caracteres Ý en la línea " + i);
writer2.newLine();
}
cleaned_line = cleaned_line.replace("Ý", "Y");
if (cleaned_line.matches("[^a-zA-Z\\d]")) {
writer2.write("Reemplazado otros caracteres extraños en la línea "
+ i);
writer2.newLine();
}
cleaned_line = cleaned_line.replaceAll("[^a-zA-Z\\d]", " ");
// 28,67
cleaned_line = line.substring(0,27) + cleaned_line + line.substring(67,line.length());
writer.write(cleaned_line);
if(!sw){
writer.write("\uFEFF");
sw = true;
}
writer.newLine();
line = br.readLine();
i++;
final int x = i;
this.display.syncExec(new Runnable() {
@Override
public void run() {
progressBar.setSelection(x);
}
});
}
br.close();
writer.close();
writer2.close();
listener.onComplete();
} catch (Exception e) {
listener.onError(e);
}
}
public Integer countLines(String filename) throws IOException {
InputStream is = new BufferedInputStream(new FileInputStream(filename));
try {
byte[] c = new byte[1024];
int count = 0;
int readChars = 0;
boolean empty = true;
while ((readChars = is.read(c)) != -1) {
empty = false;
for (int i = 0; i < readChars; ++i) {
if (c[i] == '\n') {
++count;
}
}
}
return (count == 0 && !empty) ? 1 : count;
} finally {
is.close();
}
}
public void setProgressBar(ProgressBar progressBar) {
this.progressBar = progressBar;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment