InputStream input = new FileInputStream("c:\\myJSP\\shu.txt"); 这样的读法就不是读服务器上的内容了,是读客户端的C:盘下的文件了,如果要读服务器上的文件要用流的方式来读。构造一个URL,用url就可以获得一个输入流了,后面的IO处理就一样了。另外,如果只是要读服务器上的文件,APPLET是不用做数据签名的,做数字签名一般是解决访问客户机本身的资源或者APPLET服务器之外的WEB站点才用做数字签名的。

解决方案 »

  1.   

    数字签名不太清楚以前是这样处理的:
    1、用rmi
    2、在服务端建立个socket服务,applet通过socket读取服务器数据也许古老点,可以参考
      

  2.   

    看了楼上的回答我大概了解了一些,最近这样的问题非常多啊读服务器上的文件最简单的方法就是用servlet,与servlet建立连接的方法:       java.net.URL url = new URL("http://localhost:7001/Servlet");
    URLConnection con = url.openConnection();
    con.setUseCaches(false);
    InputStream in = con.getInputStream();
    ObjectInputStream objStream;
    objStream = new ObjectInputStream(in);
    tmpList = (java.util.List) objStream.readObject();
    in.close();
    objStream.close();servlet端将你需要传递对象写如输出流
    out = response.getOutputStream();
    objStream = new ObjectOutputStream(out);objStream.writeObject(...);这时直接运行servlet可以看到一堆乱码,applet读过来就ok了
      

  3.   

    使用socket可以建立与servlet间的时时通讯
      

  4.   

    我能下载“http://www.chinajavaworld.com/forum/topic.cgi?forum=21&topic=19465&show=0”
    上的附件啊?
    我等去书店查查,好象有人说用url代替“ InputStream input = new FileInputStream("c:\\myJSP\\shu.txt"); “
     就行,我试试,servlet我不太懂。要有不懂的我在问。
    谢谢各位,行的话给分
      

  5.   

    晕,读个服务器端的文本文件要什么Serverlet啊。构造一个URL就够了啊。构造的几种方法:url = getClass().getResource("file/txt.txt");()中的文件目录是相对于该APPLET的CLASS的相对目录,txt文件要打包入APPLET的JAR文件url = new URL(getCodeBase(),"file/txt.txt");或者:url = new URL(getDocumentBase(),"file/txt.txt"),这种情况,文件目录是相对APPLET所有的WEB虚拟目录然后用:url.openStream()就得到了一个InputStrem了,后面的处理跟你读本地文件是一样的处理了
      

  6.   

    cql0007(蓝月)说的对最近向服务器端写文件的问题回答多了,顺手就敲上去了,太不认真了读文件是没有安全限制的
      

  7.   

    我改了两行:URL url = new URL(getCodeBase(),"shu.txt");//代替下一句
    //InputStream input = new FileInputStream("c:\\myJSP\\shu.txt");
    InputStreamReader reader = new InputStreamReader ( url.openStream( ));
    //InputStreamReader reader = new InputStreamReader ( input );
    URL url2 = new URL(getCodeBase(),"time.txt");//代替下一句
    //InputStream input2 = new FileInputStream("c:\\myJSP\\time.txt");
    DataInputStream reader2 = new DataInputStream ( url2.openStream( ));//可以代替下一句?
    //DataInputStream input3 =new DataInputStream(input2);
    Time = reader2.readLine();
    //time = input3.readLine();
    在本地运行时通过,压缩成jar文件,然后嵌在html中,
    可是在客户端,仍然无法访问,只显示读文件之前的测试点。
    怎么回事????????????
    //我的代码
    import java.io.*;
    import java.util.StringTokenizer;
    import java.lang.Double;
    import java.lang.Integer;
    import java.awt.*;
    import java.applet.*;
    import java.awt.event.*;
    import java.net.*;
    public class Huatu extends Applet implements MouseMotionListener 
    {
       String msg="";
       double mouseX=0,mouseY=0;
       Image picture;
    public void init()
       {
           picture=getImage(getCodeBase(),"image.gif");
           addMouseMotionListener(this);  
           this.resize(561,410);   
       }
     public void paint(Graphics g)
       {
           g.drawImage(picture,0,0,this);
           g.fillOval(100,100,5,5);        
           g.drawString(msg+mouseX+","+mouseY,32,405);
           try
    {
    String delim1 = ",";   
    String shu,time;
    double t,j;
    URL url = new URL(getCodeBase(),"shu.txt");//代替下一句
    //InputStream input = new FileInputStream("c:\\myJSP\\shu.txt");
    InputStreamReader reader = new InputStreamReader ( url.openStream( ));
    //InputStreamReader reader = new InputStreamReader ( input );
    BufferedReader bufReader = new BufferedReader ( reader );
    String name = bufReader.readLine();
    StringTokenizer tokenizer;
    tokenizer = new StringTokenizer(name, delim1);
    URL url2 = new URL(getCodeBase(),"time.txt");//代替下一句
    //InputStream input2 = new FileInputStream("c:\\myJSP\\time.txt");
    DataInputStream reader2 = new DataInputStream ( url2.openStream( ));//可以代替下一句?
    //DataInputStream input3 =new DataInputStream(input2);
    Time = reader2.readLine();
    //time = input3.readLine();
    t=Double.valueOf(time).doublevalue();
    for (int i=0;tokenizer.hasMoreTokens();i++)
    {
    j=(i+1)*(2000/t);//j=10/j=20.....
    g.fillOval(200,200,5,5);
    shu = tokenizer.nextToken(delim1);
    double a,b,e; 
    int c,m;                       
    a=Double.valueOf(shu).doublevalue();//包装器类Double.valueOf
    g.drawString("The t is,"+t,200,200); //a是double出错                        
    b=359-(a*359/1000);
    //g.drawString("The data is,"+data,300,300);
    c=(int)b;
    e=j/4+36;
    m=(int)e;
    //g.drawString("The value c is,"+b,250,250);
    //g.drawString("The value j is,"+e,250,250);
    g.fillOval(m,c,3,3);
     } 
                   }
    catch (IOException ioe)
    {
    System.out.println ("I/O error : " + ioe);
    }  
          }
          public void update(Graphics g) 
          {
           paint(g);
          }
     public Huatu()
       {
       }
       public void mouseDragged(MouseEvent me)
       {
       }
       public void mouseMoved(MouseEvent me)
       {
       double aaa,bbb,ccc,ddd;
       ccc=me.getX()-36;
       mouseX=ccc*4.00;
       aaa=-(me.getY()-359);
       bbb=aaa/359;
       mouseY=bbb*1030;
       //mouseY=((-(me.getY()-439+18))/35)*100;
       //aaa=(double)(-(me.getY()-400+18));//转化出错
       //bbb=aaa/35;
       //mouseY=bbb*100;//将me.getY()给int,再转化成double
       
       msg="mouse at";
       Graphics g=getGraphics();
       repaint();
       }
       
    }
      

  8.   

    在我的文件夹中:一个gif ,两个txt:放数(描点),一个压缩的jar(Huatu.class)
                  一个Huatu.class,一个Huatu.java,一个html:
    html:<html>
    <head>
    <title>shiyan</title>
    </head>
    <body>
    <applet
    code="Huatu.class" 
    ARCHIVE ="monitor.jar"
    width=561 
    height=410
    ALIGN = middle>
    </applet>
    </body>
    </html>
      

  9.   

    URL url = new URL(getCodeBase(),"shu.txt");//代替下一句
    //InputStream input = new FileInputStream("c:\\myJSP\\shu.txt");
    InputStreamReader reader = new InputStreamReader ( url.openStream( ));
    这里的代码应该是正确的,这种表示方法要把TXT文件放在和HTML文件同一目录中。你应该先调试出问题在哪里,是文件没找到,还是读文件出错,还是读出来了文件解析出错。把这个URL打印出来看看正常不正常,再把第一次bufReader.readLine()的内容打印出来看看是读出来没有。
    如果有异常,看看异常出在哪里,你不要老盯着后面的描了几个点,这样不知道去哪查问题啊
      

  10.   


    代码的改变:            URL url,url2;
                    String urla = "http://25.137.183.42:8080/shu.txt"; 
                    String urlb = "http://25.137.183.42:8080/time.txt";
                    url = new URL(urla);
                    url2 = new URL(urlb);
    InputStreamReader reader = new InputStreamReader ( url.openStream( ));
    BufferedReader bufReader = new BufferedReader ( reader );
    String name = bufReader.readLine();
    StringTokenizer tokenizer;
    tokenizer = new StringTokenizer(name, delim1);
                            DataInputStream reader2 = new DataInputStream ( url2.openStream( ));
                            time = reader2.readLine();
                            t=Double.valueOf(time).doubleValue();
    结果本地开启服务器和异地均无法访问。
    若是:                  String delim1 = ",";   
                    String shu,time;
                    double t,j;
                    URL url = new URL(getCodeBase(),"shu.txt");//代替下一句
    //InputStream input = new FileInputStream("c:\\myJSP\\shu.txt");
    InputStreamReader reader = new InputStreamReader ( url.openStream( ));
    //InputStreamReader reader = new InputStreamReader ( input );
    BufferedReader bufReader = new BufferedReader ( reader );
    String name = bufReader.readLine();
    StringTokenizer tokenizer;
    tokenizer = new StringTokenizer(name, delim1);
    URL url2 = new URL(getCodeBase(),"time.txt");//代替下一句
                            //InputStream input2 = new FileInputStream("c:\\myJSP\\time.txt");
                            DataInputStream reader2 = new DataInputStream ( url2.openStream( ));//可以代替下一句?
                            //DataInputStream input3 =new DataInputStream(input2);
                            time = reader2.readLine();
                            //time = input3.readLine();
                            t=Double.valueOf(time).doubleValue();
    结果本地开启服务器(不开)可显示和异地均无法正常显示。
    我的jsp文件和两个txt放在“c:/myJSP/”中,在TOMCAT的SERVER.XML中:将其设为主目录
    <Context path="/myJSP" docBase="c:\myJSP" debug="0"
                    reloadable="true" crossContext="true">
            </Context>
    原始代码:
    //ckage huatu;
    import java.io.*;
    import java.util.StringTokenizer;
    import java.lang.Double;
    import java.lang.Integer;
    import java.awt.*;
    import java.applet.*;
    import java.awt.event.*;
    import java.net.*;
    public class Huatu extends Applet implements MouseMotionListener 
    {
        String msg="";
        double mouseX=0,mouseY=0;
        Image picture;
     public void init()
        {
            picture=getImage(getCodeBase(),"image.gif");
            addMouseMotionListener(this);  
            this.resize(561,410);   
        }
      public void paint(Graphics g)
        {
            g.drawImage(picture,0,0,this);
            g.fillOval(100,100,5,5);        
            g.drawString(msg+mouseX+","+mouseY,32,405);
            try
    {
                    String delim1 = ",";   
                    String shu,time;
                    double t,j;
    InputStream input = new FileInputStream("c:\\myJSP\\shu.txt");
    InputStreamReader reader = new InputStreamReader ( input );
    BufferedReader bufReader = new BufferedReader ( reader );
    String name = bufReader.readLine();
    StringTokenizer tokenizer;
    tokenizer = new StringTokenizer(name, delim1);
                InputStream input2 = new FileInputStream("c:\\myJSP\\time.txt");
                DataInputStream input3 =new DataInputStream(input2);
                time = input3.readLine();
                t=Double.valueOf(time).doubleValue();
    for (int i=0;tokenizer.hasMoreTokens();i++)
     {
                            j=(i+1)*(2000/t);//j=10/j=20.....
                            g.fillOval(200,200,5,5);
                            shu = tokenizer.nextToken(delim1);
                            double a,b,e; 
                            int c,m;                       
                            a=Double.valueOf(shu).doubleValue();//包装器类Double.valueOf
                            g.drawString("The t is,"+t,200,200); //a是double出错                        
                            b=359-(a*359/1000);
                            //g.drawString("The data is,"+data,300,300);
                            c=(int)b;
                            e=j/4+36;
                            m=(int)e;
                            //g.drawString("The value c is,"+b,250,250);
                            //g.drawString("The value j is,"+e,250,250);
                            g.fillOval(m,c,3,3);
                            } 
                    }
    catch (IOException ioe)
    {
    System.out.println ("I/O error : " + ioe);
    }  
           }
           public void update(Graphics g) 
           {
            paint(g);
           }
      public Huatu()
        {
        }
        public void mouseDragged(MouseEvent me)
        {
        }
        public void mouseMoved(MouseEvent me)
        {
         double aaa,bbb,ccc,ddd;
         ccc=me.getX()-36;
         mouseX=ccc*4.00;
         aaa=-(me.getY()-359);
         bbb=aaa/359;
         mouseY=bbb*1030;
         //mouseY=((-(me.getY()-439+18))/35)*100;
         //aaa=(double)(-(me.getY()-400+18));//转化出错
         //bbb=aaa/35;
         //mouseY=bbb*100;//将me.getY()给int,再转化成double
        
         msg="mouse at";
         Graphics g=getGraphics();
         repaint();
        }
        
    }
      

  11.   

    : cql0007(蓝月) (:
    好,我试试,
    昨天我把url改成“String urla = "http://25.137.183.42:8080/shu.txt"; “
    的形式,连本地也不行了
      

  12.   

    URL url = new URL(getCodeBase(),"shu.txt");//代替下一句
    url还是以这种方式构造的好,直接用IP的可能会造成安全限制(不过我也没试过,但没必要那样弄)。你现在是首先要试出来读文件正常不正常,不正常你要看报什么异常才行,这样才能查出问题在哪里。把异常在这里贴出来,把那个构造完的url打印出来,首先检查那个URL你构造的对不对,检查的方式就是:在IE里直接输入那个URL,看看是不是能找到那个TXT文件,看看正确与否。然后再看输入流构造的正确不正确,打印出流读到的东西。不正常有异常就贴出异常
      

  13.   

    不好意思,耽误这么多天,有事情,用cql0007(蓝月) 的方法,解决了问题。
    以前是数字签名的问题,做了反而不好。
    还有点小问题,再向大家请教。
    谢谢