Reading from hashtables
Hi all,
i am currently developing a java application that will read in a CSV
file which includes computer names and mac addresses. I have two
seperate functions within a class. One function is called readFile();
and the other function is called WOL();.
In the readFile() function it reads the CSV file in and then adds the
data into a hashtable. I then want to retrieve a computer name from
the hashtable being ran from the WOL function. However when I output
the hash table to the console it says that the table is null. When I
use the exact same code and place that within the readFile function it
works fine. The code is below:
package remoteshutdown;
import java.awt.Dimension;
import java.awt.Point;
import java.io.*;
import java.net.*;
import java.util.*;
public class WakeOnLan {
String macStr;
// String mac;
// String Computer;
Hashtable<String, String> macTable = new Hashtable<String,
String>();
public static final int PORT = 9;
public void readFile() {
try {
// Open the file that is the first
// command line parameter
FileInputStream fstream = new FileInputStream("C:\
\Documents and Settings\\All Users\\Application Data\\Remote Shutdown\
\DHCP Export.csv");
// Get the object of DataInputStream
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new
InputStreamReader(fstream));
String strLine;
//Read File Line By Line
while ((strLine = br.readLine()) != null) {
System.out.println("strLine is: " + strLine );
StringTokenizer st = new StringTokenizer(strLine, ",.");
String Computer = st.nextToken();
if(strLine.contains("."))
{
int firstIndex = strLine.indexOf(".");
int lastIndex = strLine.lastIndexOf(".");
if (firstIndex == lastIndex) {
st.nextToken();
}
else {
st.nextToken();
st.nextToken();
}
}
String mac = st.nextToken();
System.out.println("\t\tComputer : " + Computer+" for
"+mac);
macTable.put((String)Computer, (String)mac);
// Print the content on the console
//Close the input stream
}
System.out.println("CLOSING IN");
in.close();
} catch (Exception e) { //Catch exception if any
System.err.println("Error: " + e.toString());
}
}
public void WOL() {
String Computer = (String)
mainScreen.lstComputerNames.getSelectedValue();
System.out.println("the mac table has inside: " + macTable);
String wakeComputer = (String)macTable.get("cbo_test2");
System.out.println("wakeComputer is:" + wakeComputer);
System.out.println("computer variable is: " + Computer);
String ipStr = "255.255.255.255"; //broadcast address
String macStr = "00:30:4F:1C:95:DF"; //CBO_TEST2
try {
byte[] macBytes = getMacBytes(macStr);
byte[] bytes = new byte[6 + 16 * macBytes.length];
for (int i = 0; i < 6; i++) {
bytes[i] = (byte) 0xff;
}
for (int i = 6; i < bytes.length; i += macBytes.length) {
System.arraycopy(macBytes, 0, bytes, i,
macBytes.length);
}
InetAddress address = InetAddress.getByName(ipStr);
DatagramPacket packet = new DatagramPacket(bytes,
bytes.length, address, PORT);
DatagramSocket socket = new DatagramSocket();
socket.send(packet);
socket.close();
System.out.println("Wake-on-LAN packet sent.");
}
catch (Exception e) {
System.out.println("Failed to send Wake-on-LAN packet: +
e");
System.exit(1);
}
}
private static byte[] getMacBytes(String macStr) throws
IllegalArgumentException {
byte[] bytes = new byte[6];
String[] hex = macStr.split("(\\:|\\-)");
if (hex.length != 6) {
throw new IllegalArgumentException("Invalid MAC
address.");
}
try {
for (int i = 0; i < 6; i++) {
bytes[i] = (byte) Integer.parseInt(hex[i], 16);
}
}
catch (NumberFormatException e) {
throw new IllegalArgumentException("Invalid hex digit in
MAC address.");
}
return bytes;
}
}
Any help in this matter would be highly appreciated.
Thank you