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

Se Steg
Relaterade Ämnen

Alien Optimus marionett

utlänningar frustande av människors kistor. Vem älskar inte 'em?Denna främmande * marionett gjordes ursprungligen som en del av min djupa "deep sea diver / alien offer" Halloween-kostym, men det var så tidskrävande att jag ansåg att det var ett...

Filma Hacking - mikrofilm filer

mikrofilm har alltid varit domänen för spioner, Kriger Fightersoch Referens bibliotekarier. Nu kan du adjungera mikrofilm särskilda egenskaper för din egen personliga fotografisk vision, men inte efter en del arbete från din sida.I detta Instructable...

Kinect SDK Hej världen

Hej folk! Här är min "Hello World" handledning för Microsoft Kinect med v1.8 SDKI denna tutorial kommer vi att använda Visual Studio (i mitt fall 2015) att skapa en WPF-program använder Kinect för att få dig och kör med SDK. Vi kommer att inleda...

Huzzah ESP8266 Temp & luftfuktighet Station

Jag började detta projekt för att se hur exakt en enkel väderstation med billiga delar skulle vara i förhållande till stora väder försäljningsställen (nyheter, weather.com, etc.).Mina intentioner är att göra 2 identiska enheter och sätta en på min br...

DMM Piggyback (Lägg till RS-232)

Det finns mods som ger en multimetern seriell anslutning genom lödning några stift, men det fungerar bara om det redan har RS-232 förmåga. Så jag bestämde mig snarare än att bygga en PIC multimeter från början, skulle jag kombitrafik bort en $4 DMM.J...

Servo Feedback hacka (gratis)

detta Instructable tog till dig av typ folk en Rachel elektronikBesök www.rachelselectronics.com för cool elektronik byggsatser och breadouts!Denna hobby servo hacka kommer att lägga till axelns position feedback genom att utnyttja servo egna interna...

Duscha Monitor Arduino med LCD-skärm

Välkommen! För vår miljö Capstone klass (senior te) för St. Olaf College vi byggt en bildskärm som skulle effektivt övervaka hur mycket vatten använder en dusch. Tanken bakom denna vatten monitor är att om du bifogar en piezo givare (liten mikrofon)...

Micro omgivningens temperatur Tracker

ÖversiktEn ultra lätta mikrokontroller baserat sensorplattform. Första hand byggt kunde för att fungera under vattnet men med tillägg av en fallskärm, användas att mäta lufttemperatur och andra mätvärden från en höjd.MålExtremt billiga sensor array C...

Online Dating

Först är, jag en ganska cool brud. Där. Jag sa det. Jag menar, åtminstone som jag ser det är. Jag är inte rädd för mycket och är nyfiken på allt, så jag kan ta en hel del saker ut. Jag kan tänka, jag kan bygga, kan jag skriva. Jag är kreativa, kunnig...

Sälja din bil Online med lätthet

sälja din bil online kommer inte att vara den enklaste processen, men du kan göra några extra dollar om du vill sälja din begagnade bil till en privat fest, snarare än att ge det som ett inbyte. Du måste välja rätt foton, ge en korrekt beskrivning, r...

Automatisk växten vattnas System

jag gjorde en automatisk anläggning vattning system genom att använda ett akvarium pump och elektrisk timer.Materialet kostade mig ca $60 vilket jag tycker är lite brant. Du kan förmodligen göra detta för omkring $40 med en luftpump istället för en d...

Sänka Power/automatisk avstängning på PS3

PS3 avger mycket energi, men visste du theres ett sätt att automatiskt stänga av / lägre strömförbrukning?! Så om din billiga/vill säkra makten, här är en guide för dig!Här är några olika steg att sänka spänningen i en PS3:Steg 1: Aktivera automatisk...

Automatisk Beacon Night Light - projektet Geek #3

Någonsin undrat hur coolt det skulle vara om lamporna fick aktiverad så fort du kliver in i ett rum eller när du vaknar mitt i natten och lamporna får automatiskt aktiverad. Jag presentera nördiga automatiska fyren ljuset som är ett bra skrivbord lju...

Automatisk cymbaler från gamla skrivare

Hej alla! Jag vill visa dig hur man gör en automatisk cymbaler från gamla pinter delar.Steg 1: material Du behöver:-Lätt-steg stepper motor driver-mekanik från gamla skrivare-stegmotor (från pronter)-gränslägesbrytaren (från skrivare)-en bit av trä -...

Automatisk hörlurar Equalizer

Med tanke på ett par hörlurar, kan vi göra dem låter som en annan, kanske högre kvalitet par hörlurar? I detta instructable, vi kommer att bygga en enhet som försöker göra just detta. Vår automatiska hörlurar equalizer kommer att mäta Frekvensgången...

Hur du ställer in Online Gaming på en Xbox 360

Instruktionerna nedan som visar nybörjare och mellanliggande spelare hur man ställer in online gaming för deras XBOX 360 video spelkonsolen efter att de har köpt Xbox Live online access kort och knappat in åtkomstkoden. Anvisningarna kommer att omfat...

Giant häxa näsa Booger automatisk tvålpump

Ewwwwwwww. Gjorts i form av en häxa näsa. Nej, inte stirra på håriga vårtan. Körs inte när näsan rinner. Perfekt för alla Halloween inredningar.De har jätte näsa Tvålautomater på marknaden men du måste sqeeze dem manuellt för att få tvål ut. Ingen ko...

Survival serien 1,02 - FAK hämtning praxis

Hej och Välkommen!I någon överlevnad situationen är det viktigt att veta och praktiken hämtning av din FAK eller förstahjälpen Kit. Jag ville gå över några övningar som jag tycker är bra i memorera platsen för en specifik leverans i mitt första hjälp...

Automatisk MP3-spelare

Det började som ett sätt att hälsningen trick-or-treaters med ett skrämmande scream eller goulish stön. Det finns enheter som kommer att slå på en enhet som en bergsprängare ansluten till en 110 outletbased på en utlösare från en rörelsedetektor. Men...