Buscador de MSDS automático en línea datos recuperación (2 / 2 paso)

Paso 2: código

No concedo el código porque el formato se arruinara.
Por lo tanto, he copiado lo siguiente. Las explicaciones están por debajo.

App.Java:

paquete org.freesideatlanta.msds;

Import java.util.ArrayList;
/**
*
* Praznav
*/
clase pública {App}

el principal vacío estático público (String [] args) {}

trate de {}

String filename = args [0];
ChemicalReader lector = new ChemicalReader(filename);
Productos químicos de ArrayList < cadena > = reader.getChemicalNames();

Catálogo de MsdsCatalog = new MsdsCatalog();
MsdsWriter escritor = new MsdsWriter();

para (química de la cadena: productos químicos) {}
MSDS msds = catalog.query(chemical);
String texto = msds.getText();
Writer.Write (química, texto);
}
Writer.Close();

} catch (ArrayIndexOutOfBoundsException e) {}
System.out.println ("uso: aplicación [filename]");
System.out.println(e.getMessage());
}
}
}

Reader.java química:

paquete org.freesideatlanta.msds;

Import java.util.ArrayList;
Import java.io.*;

clase ChemicalReader {}

String nombre;
ChemicalList ArrayList < cadena > = nuevo () ArrayList < cadena >; Lista de todos los químicos. Número de línea es Índice + 1
Línea de cadena; Cadena que contiene la línea actual del archivo
BufferedReader bufRead;
público ChemicalReader (String nombre) {}
nombre = nombre de archivo;
}

público ArrayList < cadena > getChemicalNames() {
trate de {}
FileReader entrada = new FileReader(name);
bufRead = new BufferedReader(input);

System.out.println ("la lectura comienza ahora...");
System.out.println("___________________________________________________________________________________");
System.out.println();

línea = bufRead.readLine(); Lee la primera línea
getAllChemicals();
bufRead.close(); cierra el lector
replaceBadCharacters();
} catch (IOException e) {}
System.out.println(e.getMessage());
System.out.println ("¡ error! u suck en esto ");
}
volver a chemicalList;

}

privado void replaceBadCharacters() {}
Este interates a través de arraylist y
sustituye cada espacio con un +

int tamaño = chemicalList.size(); variable para el tamaño de la lista de matriz

para (int i = 0; i < tamaño; i ++) {/ / una iteración para cada índice en la lista de matrices
String a = chemicalList.get (i) .replaceAll ("", "+"); crea una nueva variable y sustituye el espacio con un +
chemicalList.remove(i); saca la cuerda antigua en el índice
chemicalList.add(i, a); inserta la cadena nueva
}

}

privado void getAllChemicals() {}
Esto Lee cada línea del documento txt y
pone cada línea en índice separado de un
ArrayList.
trate de {}
mientras que (línea! = null) {/ / mientras el bucle que recorre en iteración cada línea hasta que no hay una
System.out.println ("química:" + linea); imprime el nombre químico
chemicalList.add(line.trim()); agrega a arraylist creado anteriormente
chemicalList.add(line);
linea = "";
línea = bufRead.readLine(); siguiente línea
}
} catch (IOException e) {}
System.out.println(e.getMessage());
System.out.println ("¡ error! u suck en esto ");
}
}
}

MSDS.java:

paquete org.freesideatlanta.msds;

clase pública MSDS {}
String nombre;
String MSDStext;
pública MSDS (cadena a) {}
nombre = a;
}

público String getText () {}
volver MSDStext;
}

público void changeText(String a) {}
MSDStext = a;
}
}

MSDSCatalog.java:

paquete org.freesideatlanta.msds;

Import org.apache.http.*;
Import org.apache.http.client.*;
Import org.apache.http.impl.client.*;
Import org.apache.http.client.methods.*;
Import org.apache.http.util.*;

Import org.jsoup.Jsoup;
Import org.jsoup.nodes.Document;
Import org.jsoup.nodes.Element;
Import org.jsoup.select.Elements;

Import java.util.ArrayList;
Import java.io.*;

clase MsdsCatalog {}

HttpClient cliente;
String URLhere = "http://hazard.com/msds/gn.cgi?query=";
ArrayList < cadena > errorsHere;
ChemicalsMSDS MSDS;
Cuerpo de cuerdas;
String edittedBody;

público MsdsCatalog() {}
cliente = new DefaultHttpClient(); Inicie al cliente de
URLhere = "http://hazard.com/msds/gn.cgi?query="; Esta es la parte genérica de la URL común para cada sitio
errorsHere = nuevo () ArrayList < cadena >;

}

MSDS públicas consulta {} (secuencia química)
trate de {}
URLhere = "http://hazard.com/msds/gn.cgi?query=";
chemicalsMSDS = new MSDS(chemical);
System.out.println ("Química siguiente" + "\n" + "química:" + químicos);
URLhere = URLhere + química;
Método HttpGet = nuevo HttpGet(URLhere); / / inserta el URL al método
System.out.println(URLhere);

HttpResponse respuesta = client.execute(method); Obtiene una respuesta desde la URL
Entidad HttpEntity = response.getEntity(); crea una entidad
cuerpo = EntityUtils.toString(entity); la entidad se convierte en una cadena y anuncios para el cuerpo

Boolean hasJtBakerDb = (body.indexOf("jtbaker.com") > = 0);
Boolean hasSafetyCard = (body.indexOf("mf/cards/file") > = 0);
Boolean hasFileCard = (body.indexOf("href=f") > = 0);

Si (hasJtBakerDb || hasSafetyCard || hasFileCard) {}
caso afirmativo
System.out.println ("sin errores");
chemicalsMSDS = getMSDS();
} else {}
caso negativo
System.out.println ("¡ ERROR! ESTE PRODUCTO QUÍMICO NO SE ENCUENTRA EN LA BASE DE DATOS!");
System.out.println ("Esto se añadirá a la lista de errores");
errorsHere.add(chemical);
}

} catch (IOException e) {}
System.out.println(e.getMessage());
System.out.println ("¡ error! u suck en esto ");

}
volver chemicalsMSDS;
}

privado {} getMSDS() MSDS
Boolean hasSafetyCard = (body.indexOf("mf/cards/file") > = 0);
Boolean hasFisher = (body.indexOf("fscim") > = 0);

Si (hasSafetyCard == true) {}
chemicalsMSDS = retrieveSafetyCard();
} else if (hasFisher == true) {}
chemicalsMSDS = retrieveFisher();
} else {}
chemicalsMSDS = retrieveMSDS();
}

volver chemicalsMSDS;
}

privado {} retrieveSafetyCard() MSDS
trate de {}
Documento abc = Jsoup.connect(URLhere).get();
Enlaces de elementos = abc.select("a[href]");

para (int i = 0; i < links.size(); i ++) {}
Boolean isSafetyCard = (links.get (i) .html () .indexOf ("tarjeta de seguridad") > = 0);
Si (isSafetyCard) {}
Cadena newURL = links.get(i).attr("abs:href");
Método HttpGet = nuevo HttpGet(newURL);
HttpResponse respuesta = client.execute(method);
Entidad HttpEntity = response.getEntity();
String MSDSq = EntityUtils.toString(entity);
Documento doc_one = Jsoup.parse(MSDSq);
MSDSq = doc_one.body().text();
chemicalsMSDS.changeText(MSDSq);
i = links.size() + 10;
} else {}
}
}
} catch (IOException e) {}
System.out.println(e.getMessage());
System.out.println ("¡ error! u suck en esto ");
}
volver chemicalsMSDS;

}

privado {} retrieveFisher() MSDS
trate de {}
Documento abc = Jsoup.connect(URLhere).get();
Enlaces de elementos = abc.select("a[href]");
para (int i = 0; i < links.size(); i ++) {}
Boolean isFisher = (links.get (i) .html () .indexOf ("pescador") > = 0);
Si (isFisher == true) {}
Cadena newURL = links.get(i).attr("abs:href");
Método HttpGet = nuevo HttpGet(newURL);
HttpResponse respuesta = client.execute(method);
Entidad HttpEntity = response.getEntity();
String MSDSq = EntityUtils.toString(entity);
Documento doc_one = Jsoup.parse(MSDSq);
MSDSq = doc_one.body().text();
chemicalsMSDS.changeText(MSDSq);
i = links.size() + 10;
} else {}
}
}
} catch (IOException e) {}
System.out.println(e.getMessage());
System.out.println ("¡ error! u suck en esto ");
}
volver chemicalsMSDS;
}

privado {} retrieveMSDS() MSDS
trate de {}
Documento abc = Jsoup.connect(URLhere).get();
Enlaces de elementos = abc.select("a[href]");
para (int i = 0; i < links.size(); i ++) {}
Boolean isJtBaker = (links.get (i) .html () .indexOf ("Mallinckrodt Baker") > = 0);
Boolean isErrors = (links.get(i).attr("abs:href").indexOf("msds/errors.html") > = 0);
isSearch booleano = (links.get(i).attr("abs:href").indexOf("msds/search.html") > = 0);
Boolean isArchive = (links.get(i).attr("abs:href").indexOf("msds/index.php") > = 0);
Si (isJtBaker == true || isErrors == true || isSearch == true || isArchive == true) {}
} else {}
Cadena newURL = links.get(i).attr("abs:href");
Método HttpGet = nuevo HttpGet(newURL);
HttpResponse respuesta = client.execute(method);
Entidad HttpEntity = response.getEntity();
String MSDSq = EntityUtils.toString(entity);
Documento doc_one = Jsoup.parse(MSDSq);
MSDSq = doc_one.body().text();
chemicalsMSDS.changeText(MSDSq);
i = links.size() + 10;
}
}
} catch (IOException e) {}
System.out.println(e.getMessage());
System.out.println ("¡ error! u suck en esto ");

}
volver chemicalsMSDS;
}

deleteString cadena privada (beginIndex int, endIndex int, String a) {}
String toBeDeleted = a.substring (beginIndex, endIndex);
volver a.replace (toBeDeleted, "");

}
}

MSDSWriter.java:

paquete org.freesideatlanta.msds;

Import java.io.*;
/*
* praznav
*/
clase MsdsWriter {}
FileWriter fstream;
BufferedWriter
público MsdsWriter () {
trate de {}
FStream = nuevo FileWriter("output.txt");
a = new BufferedWriter(fstream);
} catch (excepción e) {}
System.out.println(e.getMessage());
}
}

pública escritura nula (química de la cadena, String texto) {}
trate de {}
out.Append(Chemical);
out.newLine();
out.Append("___");
out.newLine();
out.Append(Text);
out.newLine();
out.newLine();
out.newLine();
} catch (excepción e) {//Catch excepción si cualquier
System.err.println ("Error:" + e.getMessage());
}
}
público void close() {}
trate de {}
out.Close();
} catch (excepción e) {}
System.out.println(e.getMessage());
}

}
}

Aquí está un resumen de cada archivo:

--Aplicaciones--
contiene el método principal y crea una instancia de cada clase de otros

--ChemicalReader--
Compilar una lista química como un objeto de conjunto de algún tipo
Convertir un nombre químico con espacios en una lista de URL amigable parámetro

--MsdsCatalog--
Ejecuta una consulta sobre el nombre químico "amigable" y obtener un resultado
Ver si este resultado es válido para nuestros propósitos
En términos de prioridad: seguridad tarjeta URL es preferido, a continuación, enlaces URL de Fisher, luego ir a través de la restante

-Msds,
String nombre = msds.getChemicalName();
String texto = msds.getText();

--MsdsWriter--
Generar archivos de texto de salida en un subdirectorio

Artículos Relacionados

Alimentador automático de pescado de papel FinFeeder

Alimentador automático de pescado de papel FinFeeder

Mi trabajo me pidieron que vaya fuera de la ciudad durante una semana en sólo unas horas de antelación. Tenía pescado en casa y estaba preocupado de que obtendrían hambriento y agresivo, así que improvisó un alimentador de peces de papel de impresora
Sistema de riego automático con sonda capacitiva y Arduino en el barato (y serio)

Sistema de riego automático con sonda capacitiva y Arduino en el barato (y serio)

Descargo de responsabilidad: Yo no soy un ingeniero en electrónica, por lo que no puedo ofrecer ninguna garantía para el diseño (mucho menos para su implementación). Sólo sé la presentó solución trabajada para mí por lo menos unos 5-6 meses (por lo q
La hidropónica, automáticos, redes, clima controlado invernadero proyecto: Construcción

La hidropónica, automáticos, redes, clima controlado invernadero proyecto: Construcción

este Instructable cubrirá la construcción de mi hidropónica, automáticos, redes, proyecto del invernadero de clima controlado. La fase de construcción del proyecto cubre las zapatas de hormigón, la estructura y el acristalamiento del invernadero.Cont
Bebedero automático electrónico planta

Bebedero automático electrónico planta

Hola, Bienvenidos a mi instructable sobre cómo hacer un bebedero automático planta electrónica. Este proyecto fue pensado para hacer una máquina que automáticamente sería agua mis plantas para que no gire a seco. Este objetivo fue alcanzado algo, más
Monitoreo de la calidad de aire automático cruise robot

Monitoreo de la calidad de aire automático cruise robot

GeneralHice un cuatro ruedas de automático cruise robot con Arduino y tipos de sensores. Luego añadí control remoto inalámbricocontrol a él. Al final, incluso construí una máquina de control de calidad de aire en el robot y pasó a ser muy útil.Por fa
A la parte futura II: ajuste automático de la chaqueta

A la parte futura II: ajuste automático de la chaqueta

Ha llegado el día, el año está aquí y el futuro es ahora. En volver al futuro parte II, Marty y el Doc viajan próximamente, ¿en qué fecha llegan en? 21 de octubre de 2015.Mi amor por wearables dinámicos y la película detrás del futuro parte II suscit
Un automático de seguimiento solar motorizado ventana ciega adaptación utilizando Arduino

Un automático de seguimiento solar motorizado ventana ciega adaptación utilizando Arduino

Cuenta edificios de 20-40% del total de energía utilice en los países desarrollados. Cortinas de ventana (o persianas) pueden ayudar a reducir la energía del edificio uso y mejorar el confort visual (es decir, reducción de fulgor y aumentar la luz de
Portátil 12 voltios 17 Watt generador de viento con enrollador automático

Portátil 12 voltios 17 Watt generador de viento con enrollador automático

solo he diseñado y construido un práctico, portátil 12 voltios 17 vatios generador eólico que es ideal (y apropiado) para configurar en campamentos, parques, exposiciones del día de la tierra, las estaciones de investigación y granjas del tercer mund
Tomador de fotos múltiples automático (estilo Photobooth)

Tomador de fotos múltiples automático (estilo Photobooth)

este es un tutorial sobre cómo programar su cámara réflex digital para tomar fotos estilo photobooth. Es una configuración simple de Arduino que permite tomar fotos continuas con intervalos de 3 segundos de retraso. Este fue construido para un proyec
Introducción al modelo de piloto automático del avión!!!

Introducción al modelo de piloto automático del avión!!!

Hi All!Tengo veinte años. Recogí mi arduino por primera vez que estas Navidades y hemos estado ocupados en mis aplicaciones de arduino que puedo traerle este instructable. Espero que ayuda!!!El propósito de este proyecto era construir un trampolín de
Sistema de llenado automático de agua de Keurig B40/B60/B70

Sistema de llenado automático de agua de Keurig B40/B60/B70

Este es un proyecto simple que hice para evitar la adición de agua en mi maquina cada vez que tomo una taza de café. Es un sistema bastante simple pero también requiere conocimientos básicos de plomería y habilidades eléctricas / soldaduras:-). Este
Nivel láser automático de un viejo disco duro.

Nivel láser automático de un viejo disco duro.

Necesito un nivel láser, pero no necesito uno muy a menudo para caer a unos pocos cientos en algo que podría utilizar de vez en cuando no iba a suceder.Eso todavía me dejó con un nivel de láser, y la única solución era hacer uno.Así que sin nada más
Control de cajeros automáticos-7 Smartphone altavoz OSD con Arduino y Blynk

Control de cajeros automáticos-7 Smartphone altavoz OSD con Arduino y Blynk

Estos días hay varias formas para implementar sonido multizona utilizando smartphone basado en control pero la mayoría se limitan a un par de zonas o requiere costosas cajas propietarias en cada lugar (¡ Hola! Sonos). Un selector de altavoces conecta
Puerta ha disparado el interruptor automático de la luz

Puerta ha disparado el interruptor automático de la luz

¡ Oh drat! Necesito entrar en que cuarto oscuro miedo, ¿qué pasa si un monstruo da un salto adelante de la oscuridad para me mi bocado de chocolate aplacarle incrustados galletas mientras que yo estoy buscando a tientas para el interruptor de la luz?