Automatisk MSDS Finder / Online datahämtning (2 / 2 steg)
Steg 2: kod
Jag kunde inte bifoga koden eftersom formateringen skulle röra upp.Så, har jag kopierat nedan. Förklaringar som anges nedan.
App.java:
paketet org.freesideatlanta.msds;
import java.util.ArrayList;
/**
*
* Praznav
*/
allmän klass App {
offentliga statisk void main (String [] args) {
försök {
Snöre arkivnamnen = args [0];
ChemicalReader läsare = nya ChemicalReader(filename);
ArrayList < sträng > kemikalier = reader.getChemicalNames();
MsdsCatalog katalog = nya MsdsCatalog();
MsdsWriter författare = nya MsdsWriter();
för (sträng kemiska: kemikalier) {
Belastningsbesvär msds = catalog.query(chemical);
String text = msds.getText();
Writer.write (kemiska, text);
}
Writer.Close();
} fånga (ArrayIndexOutOfBoundsException e) {
System.out.println ("användning: App [filnamn]");
System.out.println(e.GetMessage());
}
}
}
Kemiska Reader.java:
paketet org.freesideatlanta.msds;
import java.util.ArrayList;
import java.io.*;
allmän klass ChemicalReader {
String namn;
ArrayList < sträng > chemicalList = ny ArrayList < sträng > (); Lista över alla kemikalier. Radnumret är index + 1
Sträng linje; Sträng som innehåller aktuella fil linje
BufferedReader bufRead;
offentliga ChemicalReader (String filnamn) {
namn = filnamn.
}
offentliga ArrayList < sträng > getChemicalNames() {
försök {
FileReader ingång = nya FileReader(name);
bufRead = ny BufferedReader(input);
System.out.println ("behandlingen börjar nu...");
System.out.println("___________________________________________________________________________________");
System.out.println();
linje = bufRead.readLine(); läser första raden
getAllChemicals();
bufRead.close(); stänger läsaren
replaceBadCharacters();
} fånga (IOException e) {
System.out.println(e.GetMessage());
System.out.println ("fel! u suck på det här ");
}
återvända chemicalList;
}
privata void replaceBadCharacters() {
Denna interates genom arraylist och
ersätter varje utrymme med ett +
int storlek = chemicalList.size(); variabel för storleken på listan array
för (int jag = 0; jag < storlek; i ++) {/ / en iteration för varje index i arraylist
Sträng ett = chemicalList.get (i) .replaceAll ("", "+"); skapar en ny variabel och ersätter utrymmet med ett +
chemicalList.remove(i); tar ut gamla strängen vid index
chemicalList.add(i, a); infogar den nya strängen
}
}
privata void getAllChemicals() {
Detta läser varje rad i txt dokument och
placerar varje rad i separata index för en
ArrayList.
försök {
medan (linje! = null) {/ / medan loop som itererar igenom varje rad tills det inte finns någon
System.out.println ("kemiska:" + linje); skriver ut det kemiska namnet
chemicalList.add(line.trim()); lägger till arraylist skapade ovan
chemicalList.add(line);
linje = "";
linje = bufRead.readLine(); nästa rad
}
} fånga (IOException e) {
System.out.println(e.GetMessage());
System.out.println ("fel! u suck på det här ");
}
}
}
MSDS.java:
paketet org.freesideatlanta.msds;
allmän klass MSDS {
String namn;
Sträng MSDStext;
offentliga MSDS (sträng en) {
namn = a;
}
offentliga sträng getText () {
återvända MSDStext;
}
public void changeText(String a) {
MSDStext = a;
}
}
MSDSCatalog.java:
paketet 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.*;
allmän klass MsdsCatalog {
HttpClient klient;
String URLhere = "http://hazard.com/msds/gn.cgi?query=";
ArrayList < sträng > errorsHere;
Säkerhetsdatablad chemicalsMSDS;
Sträng kropp;
Sträng edittedBody;
offentliga MsdsCatalog() {
kund = nya DefaultHttpClient(); Starta klienten
URLhere = "http://hazard.com/msds/gn.cgi?query="; Detta är den allmänna delen av URL: en gemensam för varje webbplats
errorsHere = ny ArrayList < sträng > ();
}
offentliga MSDS-fråga (sträng kemiska) {
försök {
URLhere = "http://hazard.com/msds/gn.cgi?query=";
chemicalsMSDS = ny MSDS(chemical);
System.out.println ("Nästa kemiska" + "\n" + "kemiska:" + kemisk);
URLhere = URLhere + kemikalien.
HttpGet metod = nya HttpGet(URLhere); / / infogas URL till metoden
System.out.println(URLhere);
HttpResponse svar = client.execute(method); får ett svar från URL:
HttpEntity enhet = response.getEntity(); skapar en enhet
Body = EntityUtils.toString(entity); konverterar enheten till en sträng och annonser att kroppen
booleska hasJtBakerDb = (body.indexOf("jtbaker.com") > = 0);
booleska hasSafetyCard = (body.indexOf("mf/cards/file") > = 0);
booleska hasFileCard = (body.indexOf("href=f") > = 0);
om (hasJtBakerDb || hasSafetyCard || hasFileCard) {
jakande fall
System.out.println ("inga fel");
chemicalsMSDS = getMSDS();
} annat {
negativa fall
System.out.println ("fel! DENNA KEMIKALIE FINNS INTE I DATABASEN!");
System.out.println ("Detta kommer att läggas till FELLISTAN över");
errorsHere.add(chemical);
}
} fånga (IOException e) {
System.out.println(e.GetMessage());
System.out.println ("fel! u suck på det här ");
}
återvända chemicalsMSDS;
}
privat MSDS getMSDS() {
booleska hasSafetyCard = (body.indexOf("mf/cards/file") > = 0);
booleska hasFisher = (body.indexOf("fscim") > = 0);
om (hasSafetyCard == true) {
chemicalsMSDS = retrieveSafetyCard();
} else om (hasFisher == true) {
chemicalsMSDS = retrieveFisher();
} annat {
chemicalsMSDS = retrieveMSDS();
}
återvända chemicalsMSDS;
}
privat MSDS retrieveSafetyCard() {
försök {
Dokumentera abc = Jsoup.connect(URLhere).get();
Delar länkar = abc.select("a[href]");
för (int jag = 0; jag < links.size(); i ++) {
booleska isSafetyCard = (links.get (i) .html () .indexOf ("Safety Card") > = 0);
om (isSafetyCard) {
String newURL = links.get(i).attr("abs:href");
HttpGet metod = nya HttpGet(newURL);
HttpResponse svar = client.execute(method);
HttpEntity enhet = response.getEntity();
String MSDSq = EntityUtils.toString(entity);
Dokumentera doc_one = Jsoup.parse(MSDSq);
MSDSq = doc_one.body().text();
chemicalsMSDS.changeText(MSDSq);
Jag = links.size() + 10.
} annat {
}
}
} fånga (IOException e) {
System.out.println(e.GetMessage());
System.out.println ("fel! u suck på det här ");
}
återvända chemicalsMSDS;
}
privat MSDS retrieveFisher() {
försök {
Dokumentera abc = Jsoup.connect(URLhere).get();
Delar länkar = abc.select("a[href]");
för (int jag = 0; jag < links.size(); i ++) {
booleska isFisher = (links.get (i) .html () .indexOf ("Fisher") > = 0);
om (isFisher == true) {
String newURL = links.get(i).attr("abs:href");
HttpGet metod = nya HttpGet(newURL);
HttpResponse svar = client.execute(method);
HttpEntity enhet = response.getEntity();
String MSDSq = EntityUtils.toString(entity);
Dokumentera doc_one = Jsoup.parse(MSDSq);
MSDSq = doc_one.body().text();
chemicalsMSDS.changeText(MSDSq);
Jag = links.size() + 10.
} annat {
}
}
} fånga (IOException e) {
System.out.println(e.GetMessage());
System.out.println ("fel! u suck på det här ");
}
återvända chemicalsMSDS;
}
privat MSDS retrieveMSDS() {
försök {
Dokumentera abc = Jsoup.connect(URLhere).get();
Delar länkar = abc.select("a[href]");
för (int jag = 0; jag < links.size(); i ++) {
booleska isJtBaker = (links.get (i) .html () .indexOf ("Mallinckrodt Baker") > = 0);
booleska isErrors = (links.get(i).attr("abs:href").indexOf("msds/errors.html") > = 0);
booleska isSearch = (links.get(i).attr("abs:href").indexOf("msds/search.html") > = 0);
booleska isArchive = (links.get(i).attr("abs:href").indexOf("msds/index.php") > = 0);
om (isJtBaker == true || isErrors == true || isSearch == true || isArchive == true) {
} annat {
String newURL = links.get(i).attr("abs:href");
HttpGet metod = nya HttpGet(newURL);
HttpResponse svar = client.execute(method);
HttpEntity enhet = response.getEntity();
String MSDSq = EntityUtils.toString(entity);
Dokumentera doc_one = Jsoup.parse(MSDSq);
MSDSq = doc_one.body().text();
chemicalsMSDS.changeText(MSDSq);
Jag = links.size() + 10.
}
}
} fånga (IOException e) {
System.out.println(e.GetMessage());
System.out.println ("fel! u suck på det här ");
}
återvända chemicalsMSDS;
}
privata sträng deleteString (int beginIndex, int endIndex, sträng en) {
String toBeDeleted = a.substring (beginIndex, endIndex);
returnera a.replace (toBeDeleted, "");
}
}
MSDSWriter.java:
paketet org.freesideatlanta.msds;
import java.io.*;
/*
* praznav
*/
allmän klass MsdsWriter {
FileWriter fstream;
BufferedWriter ut;
offentliga MsdsWriter () {
försök {
FStream = nya FileWriter("output.txt");
ut = nya BufferedWriter(fstream);
} fånga (undantag e) {
System.out.println(e.GetMessage());
}
}
public void skriva (sträng kemiska, String text) {
försök {
out.append(Chemical);
out.newLine();
out.append("___");
out.newLine();
out.append(text);
out.newLine();
out.newLine();
out.newLine();
} fånga (undantag e) {//Catch undantag om någon
System.ERR.println ("fel:" + e.getMessage());
}
}
public void close() {
försök {
out.Close();
} fånga (undantag e) {
System.out.println(e.GetMessage());
}
}
}
här är en sammanfattning av varje fil:
--App--
innehåller den huvudsakliga metoden och instansierar varje andra klass
--ChemicalReader--
Sammanställa en kemisk lista som ett array-objekt av något slag
Konvertera ett kemiskt namn med blanksteg i en URL vänliga parameterlista
--MsdsCatalog--
Köra en fråga på ett "eget" kemiska namn, och få ett resultat
Se om detta resultat är giltig för våra ändamål
När det gäller prioritet: säkerhet kort URL är att föredra, sedan Fisher URL, sedan gå igenom återstående länkar
--Msds--
String namn = msds.getChemicalName();
String text = msds.getText();
--MsdsWriter--
Generera utdata textfiler i en sub katalog