20. februar 2002 - 11:31Der er
38 kommentarer og 1 løsning
Læse en fil på brugers PC via Applet
Er der nogen der ved hvilken metode man skal bruge hvis man vil læse en fil på brugers pc. Det skal foregå på den måde at når bruger henter Applet fra webserver, så skal Appletten læse en fil fra brugers PC, og sammenligne den med en fra en oprettet database. Lidt ligesom det foregår i Homebanking
Det vil brugeren give adgang til, da han ellers ike kan logge på Intranet. Det er til et studieprojekt. Men hvordan gør man. Hvilke metoder skal der anvendes
At læse filen (når der er givet tilladelse) er nemt: String home = System.getProperty("user.home"); String separator = System.getProperty("file.separator"); File file = new File(home+separator+"userfile"); int length = (int)file.length(); byte[] data = new byte[length]; FileInputStream fis = new FileInputStream( file ); fis.read( data, 0, length ); Du skal så sammenligne data med det tilsvarende læst fra din database. Hvordan der læses fra den kan jeg af gode grunde ikke vide.
Det er en form for nøgle der skal være der. Appletten skal sammenligne den med en nøgle i min database og hvis de er ens skal brugeren kunne indtaste brugernavn og password...
Mener du direktoriet? I så fald tilføj noget til argumentet efter separator og husk at tilføje ekstra separatorer så det kører både under Unix og Windows. File file = new File(home+s+"subdir1"+s+"subdir2+s+"filename");;
Pas på, den finder automatisk brugerens hjemme- direktorie med System.getProperty("user.home") og hvilken karakter der bruges til at separere direktorierne: \ under Windows og / under Unix. Hvis du bruger det, så ja.
har følgende, men det virker ikke. package laesefil; import java.*; import java.io.*; import cs1.*; public class laesefil {
// int length = (int)file.length();
String home = System.getProperty("user.home"); String separator = System.getProperty("file.separator"); File file = new File(home+separator+"kode.txt"); int length = (int)file.length(); byte[] data = new byte[length];
public laesefil() {
} public void main(String args[]) { try { FileInputStream fis = new FileInputStream( file ); fis.read( data, 0, length ); System.out.println("Try"); Keyboard.readChar(); } catch( IOException e ) { if( e.getMessage()!=null ) System.out.println("Catch"); Keyboard.readChar(); { } } } Kan du se nogle fejl
Nu ser den sådan ud:: package laesefil; import java.*; import java.io.*; import cs1.*; public class laesefil {
// int length = (int)file.length();
String home = System.getProperty("user.home"); String separator = System.getProperty("file.separator"); File file = new File(home+separator+"kode.txt"); int length = (int)file.length(); byte[] data = new byte[length];
Følgende lettere reducerede program kører fint og kaster ingen exceptions. Du skal naturligvis huske at oprette filen kode.txt i hjemmedirektoriet. import java.io.*; public class laesfil {
public static void main( String[] args ) { try { String home = System.getProperty("user.home"); String separator = System.getProperty("file.separator"); File file = new File(home+separator+"kode.txt"); int length = (int)file.length(); byte[] data = new byte[length]; FileInputStream fis = new FileInputStream( file ); fis.read( data, 0, length ); System.out.println("length="+length); } // try catch( IOException e ) { if( e.getMessage()!=null ) System.out.println("e="+e); } // catch } // main } // laesfil
Det er det evindelige problem med store udviklingsværktøjer, man ved ikke hvordan de egentlig virker. Programmet kører fint hos mig under Linux. Hvad med at prøve at køre det i en dos shell eller hvad du nu har på kommandolinien, så kan du se alt hvad der kommer ud. PS Den kører ikke som en applet vel?
Så er det javac jeg skal bruge, men det kan jeg ikke huske hvordan man gør ;-((. Eksempelvis med homebanking, der kan de gøre det men det er jo også en .usf fil de bruger. Hvad det lige står for det ved jeg ikke... Men det skal sq kunne ladse sig gøre..
Ja, naturligvis, her kører det nemt. Problemet er at JBuilder og lign. muligvis manipulerer med forskellige direktorier og hvis ikke man er helt med på det kan visse ting virke underlige. Prøv at compilere fra kommandolinien. Du gør som følger: javac laesfil.java java -cp . laesfil så skulle du have klaret både compilering og eksekvering. Prøv iøvrigt at tilføje udskrift at System.getProperty("user.home") for at finde ud af hvad systemet mener er hjemmedirektoriet for brugere, formentlig er det "C:\" men måske er det noget andet. Hvis det er et borland direktorie så smut forbi java.sun.com og download J2SDK1.4.0 det findes der til Windows, Linux og Solaris. Så kan du køre med det istedet. Det er ikke en god ide (synes jeg) at benytte klasser som cs1 fordi de ikke er en del af standarddistributionen. Husk på at dine Applets skal køre på klientsiden.
User.home er C:\Documents and settings\jesper\ Hvis jeg kører den fra kommandolinie skriver den det samme:: java.io.FileNotFoundExcption: C:\Documents and settings\jesper\kode.txt(Adgang nægtet) Så ? er hvad man så kan prøve.. Selvom jeg laver filen ikke-skrivebeskyttet, så ændre det ikke noget, da den med det samme laver den skrivebeskyttet igen...
Med hensyn til cs1, så er det kun en hjælp til at se hvad den skriver i prompt når jeg kompilere. Fjerner den altid når et program kører optimalt...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.