Captain's Universe Home
Captain's Universe Home
SeaMonkey Artemia and Browser Cosmic Ray Muon DetectorTeleGarden Pages
Time on MarsBryophyllum Plants
Jupiter Radio AstronomyAncient Pages
Salzburg Tourist GuideEarth Magnetometer
  H O M E     AJAX & MORE     LINUX & MORE     RTAI     XENOMAI     ADEOS IPIPE      
    JAVA & BROWSERS     *NIX     ELECTRONICS     REVIEWS     ARTEMIA     FAIRY SHRIMP      


How to open/read/write a local file from an applet:

This page shows a method for accessing/reading/writing local files from a JAVA applet in your browser. Bascially you just need to sign the applet with a certificate and you're ready to go.

The code: displays a filedialog, opens, reads and displays the file (in the JAVA console):
See below for a full applet

	int arrlen = 10000;
	byte[] infile = new byte[arrlen];
	Frame parent = new Frame();
	FileDialog fd = new FileDialog(parent, "Please choose a file:",
	           FileDialog.LOAD);
	fd.show();
	String selectedItem = fd.getFile();
	if (selectedItem == null) {
		// no file selected
	} else {
		File ffile = new File( fd.getDirectory() + File.separator +
		        fd.getFile());
		// read the file
		System.out.println("reading file " + fd.getDirectory() +
		                         File.separator + fd.getFile() );
		try {
			FileInputStream fis = new FileInputStream(ffile); 
			BufferedInputStream bis = new BufferedInputStream(fis);
			DataInputStream dis = new DataInputStream(bis);
			try {
				int filelength = dis.read(infile);
				String filestring = new String(infile, 0, filelength);
				System.out.println("FILE CONTENT=" + filestring);
			} catch(IOException iox) {
				System.out.println("File read error...");
				iox.printStackTrace();
			}
		} catch (FileNotFoundException fnf) {
			System.out.println("File not found...");
			fnf.printStackTrace();
		}
	}		

Now we need to make an (inofficial) certificate. It IS a certificate, but the browser-plugin will display a certificate-requester, which says that it is unofficial. We do not need to care about this - the user has to decide if he trusts you or not. Maybe you want to state on your page, that the plugin says it is unofficial and therefore not trustworthy, but the user has to accept it in order to run the applet. The permissions are the same - official or unofficial - that doesn't count.


OK, here we go:

'keytool' is delivered with Sun's development kit.

keytool -genkey -keyalg rsa -alias yourkey
Follow the instructions and type in all needed information.

Now we make the certificate:
keytool -export -alias yourkey -file yourcert.crt

Now we have to sign the applet:

Just make a *.bat file including this:

javac yourapplet.java
jar cvf yourapplet.jar yourapplet.class
jarsigner yourapplet.jar yourkey

The batch-file compiles the applet, makes a jar-archive and signs the jar-file.

The HTML-code to display the applet:
<applet code="yourapplet.class" archive="yourapplet.jar" width="600" height="500">
</applet>

Now we are done! The applet is signed and if the user accepts the certificate, the applet is allowed to access local files. If the user doesn't agree, this appears in the console:

java.security.AccessControlException: access denied (java.io.FilePermission yourfilename read) at java.security.AccessControlContext.checkPermission(AccessControlContext.java:270) at java.security.AccessController.checkPermission(AccessController.java:401) at java.lang.SecurityManager.checkPermission(SecurityManager.java:542) at java.lang.SecurityManager.checkRead(SecurityManager.java:887)

Doesn't look good. It isn't! The accesscontroller checks if it is allowed to read the file. The certificate was not accepted, therefore the applet isn't allowed.

The full applet source code:

The applet displays a small button "open". Click on it, the file requester shows up and select a small text file i.e. on your harddisk. The content of the text file is displayed in the JAVA console.



localfile.java
import java.applet.*;
import java.awt.*;
import java.util.*;
import java.lang.*;
import java.text.*;
import java.awt.event.*; 
import java.io.*;

public class localfile extends Applet {
	public localfile() {
		Panel p = new Panel();
		Font f;
		String osname = System.getProperty("os.name","");
		if (!osname.startsWith("Windows")) {
			f = new Font("Arial",Font.BOLD,10);
		} else {
			f = new Font("Verdana",Font.BOLD,12);
		}
		p.setFont(f);
		p.add(new Button("Open"));
		
		p.setBackground(new Color(255, 255, 255));
		
		add("North",p);
		
	}
	public boolean action(Event evt, Object arg) {
		if (arg.equals("Open")) {
			System.out.println("OPEN CLICKED");
			
			int arrlen = 10000;
			byte[] infile = new byte[arrlen];
			Frame parent = new Frame();
			FileDialog fd = new FileDialog(parent, "Please choose a file:",
			    FileDialog.LOAD);
			fd.show();
			String selectedItem = fd.getFile();
			if (selectedItem == null) {
				// no file selected
			} else {
				File ffile = new File( fd.getDirectory() + File.separator +
				                     fd.getFile());
				// read the file
				System.out.println("reading file " + fd.getDirectory() +
				                        File.separator + fd.getFile() );
				try {
					FileInputStream fis = new FileInputStream(ffile); 
					BufferedInputStream bis = new BufferedInputStream(fis);
					DataInputStream dis = new DataInputStream(bis);
					try {
						int filelength = dis.read(infile);
						String filestring = new String(infile, 0,
						                           filelength);
						System.out.println("FILE CONTENT=" + filestring);
					} catch(IOException iox) {
						System.out.println("File read error...");
						iox.printStackTrace();
					}
				} catch (FileNotFoundException fnf) {
					System.out.println("File not found...");
					fnf.printStackTrace();
				}
			}		
			
		} else return false;
		return true;
	}

}

index.html
<html>
<body bgcolor="#dddddd">
<applet code="localfile.class" archive="localfile.jar"  width="100" height="100">
</applet>
</body>
</html>

Compile, pack and sign the applet with:
javac localfile.java
jar cvf localfile.jar localfile.class
jarsigner localfile.jar yourkeyname


last update: 29-JUL-2005

Google
 
Web www.captain.at
go to top
© 1996-2008 . All rights reserved.
No reproduction, distribution, publishing or transmission of the copyrighted materials at this site is permitted. Policy
go to top