Meddelande

Minska
No announcement yet.

Hämta en textfil från en server och läsa in och presentera i en java applikation

Minska
X
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • Hämta en textfil från en server och läsa in och presentera i en java applikation

    Tjena!

    Jag har en liten undran.
    Jag har tänkt börja ett litet projekt som innebär att en textfil hämtas från en server... säg http://test.com/textfil.txt

    Den här textfilen ska hämtas var 10.de minut. Vid hämtning ska filen gås igenom rad för rad...
    och varje rad ska presenteras i applikationen.

    hur skulle ni göra detta?

    Stort tack för hjälpen

    /Niklas

  • #2
    Är du helt säker på att du vill använda en textfil!?
    Databas är alltid att föredra, förutom i sällsynta undantag. Men det kanske är i dessa jaktmarker du befinner dig!?

    Är din mjukvara en stand-alone är det ju bara att sätta en timer på 10 minuter... och ladda in det i din mjukvara...

    Men man kan kanske utgå från att textfilens innehåll förändras!?
    Är det denna förändring du vill göra var tionde minut?
    Om inte... det är ju rätt meningslöst att hämta *samma* fil var tionde minut!

    ***
    Detta kanske inte var så stor hjälp, rent javamässigt. Men ditt projekt innehåller en del tvivelaktiga lösningar. Antingen har du förklarat dåligt och jag missuppfattar dig, eller kanske du bör se över själva upplägget. Kanske att anta utmaningen att sätta dig in i hur databas på webben fungerar?
    - Vad hette La Liga då det begav sig?
    - Då Liga.

    Kommentera


    • #3
      Hej Civilpolisen:-)

      Jag VILL inte använda en textfil... som du säger en databas vore ju helt klart att föredra...
      Men dessvärre är det det enda som finns:-S och inte bara en textfil... utan flera...

      Det jag ska komma åt är en lista över användare som är online på servrar.
      Det är uppbyggt såhär att först måste en txt fil laddas ner, denna txtfil innehåller url till servrarna.(dessa kan ändras, så denna måste laddas ned varje gång applikationen startas). Som tur var så är txtfilen uppdelad så att varje rad motsvarar var sin server.

      Sedan så ska textfiler hämtas från varje av dessa servrar. Dessa txtfiler har en rad för varje onlineanvändare.
      Och dessa filer uppdateras var 10.de minut så därav kravet att applikationen skall hämta/kolla txtfilen med jämna mellanrum.

      Så optimalt är det absolut inte men jag har dessvärre ingen befogenhet att ändra detta på servern, så jag får snällt anpassa mig:-) som tur var behöver jag bara hämta information och inte skriva någon information...:-)

      Jag har med hjälp av en Scanner lyckats läsa in informationen från "serverlista"filen och placera dessa url i en arraylist.
      Jag kan även läsa in EN av servrarna med användare. Men när jag försöker göra en for-loop för att läsa in en server i taget så läser den in ca halva första filen, sedan fryser det bara.

      Koden jag använder för att läsa in är denna:
      (Ursäkta dåliga indenteringen)
      public void run() {
      Scanner s=null;

      // for(int x=0;x<serverList.size();x++){
      // System.out.println("X = "+x);
      // while(alive){
      try {
      for(int x=0;x<serverList.size();x++){
      //System.out.println("For loop varv "+x);
      Server server = (Server)serverList.get(x);
      URL url = new URL(server.getServerName());
      // URL url = new URL(pilotServer.getServerName());
      s = new Scanner(url.openStream());
      while ( s.hasNextLine() ){
      // System.out.println("Det finns nästa rad");
      System.out.println("Aaanvändare; "+s.nextLine());

      // processLine( s.nextLine() );
      } s.close();
      System.out.println("Det finns ingen nästa rad");
      } catch (IOException ex) {
      System.out.println("Nånting blev fel");
      }
      }
      }

      När jag har for loopen som går igenom servrarna en och en så fastnar inläsningen som sagt vid c,a halva filen... inga felmeddelanden eller något meddelande om att texten är slut. När jag däremot tar bort for loopen och bara läser in från 1 server så fungerar det fint. Men så fort for loopen finns där så verkar det låsa sig...

      Någon aning om varför?:-)=

      Kommentera


      • #4
        Det vore mycket enklare att hjälpa dig om du visar ett exempel på txt filen.
        säg:
        jhon wayne , http://www.whateverserver.com
        micke duglas , http://www.anotherserver.com

        Är det "," komma separerad, kolon separerad, space separerad, slutar varie dar med semikolon etc.
        ha det

        Kommentera


        • #5
          Det är lite olika.
          Det är helt enkelt radbrytning vid varje rad.

          Jag har dock märkt att det inte var for loopens fel... det slumpade sig helt enkelt så att när jag gladde mig åt att det verkade fungera så var det helt enkelt färre användare online... så jag tog mig igenom hela txtfilen. nu är det samma "fel" igen... det "fastnar" i filen...

          Kommentera


          • #6
            Servern jag försöker hämta in informationen ifrån är denna:
            http://de1.www.ivao.aero/whazzup.txt

            Informationen måste hämtas in rad för rad....

            Kommentera


            • #7
              den forsta raden innehåller inte någon server info, den är tom, den andra "!GENERAL"
              osv, Är du säker på att din lista innehåller ENBART det du behöver?

              Den första item i din lista borde se ut så här "212:312988:Ivan Zivotic LOWWILOT::44.8156:20.2914:345:0:1/GLF5...osv"

              Annars loppar du rätt men ingen server hittas.

              Kommentera


              • #8
                Hej!
                Som det är nu(så långt jag har kommit) så gör jag ingenting med den där filen.
                Jag lyckas som sagt hämta in textfilen med serveradresserna. det är steg 2 jag har problem med. att läsa in användare från servrarna.
                Och de första raderna är meningslösa för mig.
                Men jag tänkte förfina och bearbeta informationen när jag lyckas läsa in den. Problemet är som sagt att filen läses in ca halvvägs(det är inte halvvägs utan verkar snarare vara ett visst antal rader som den orkar med) Sedan tar det bara stopp...

                Kommentera


                • #9
                  Någon gång använde jag csharps WebCLient class för att läsa någon sidas innehåll.
                  sedan använde jag regular expression (RegEx class) för att få det jag ville läsa från den sidan och spara de i en lista.

                  http://gskinner.com/RegExr/ för att tränna regex

                  Kommentera


                  • #10
                    Innebär det att resterande av programmet måste vara i csharp?... om inte så har du lust att ge ett exempel(om du orkar) hur koden skulle se ut?:-)

                    Kommentera


                    • #11
                      package com.ryar.domain;

                      import java.io.BufferedReader;
                      import java.io.InputStreamReader;
                      import java.net.URL;
                      import java.util.ArrayList;

                      public class runIt {

                      public static void main(String[] args) {

                      ArrayList<String> myServers=new ArrayList<String>();
                      int lineCounter=0;

                      try {
                      URL nigge = new URL("http://de1.www.ivao.aero/whazzup.txt");
                      BufferedReader in = new BufferedReader(new InputStreamReader(nigge.openStream()));

                      String inputLine;

                      while ((inputLine = in.readLine()) != null){
                      lineCounter++;
                      if (inputLine.length()>100) {
                      myServers.add(inputLine);
                      }
                      }

                      in.close();

                      } catch (Exception e) {

                      }
                      System.out.println("Total lines in this file are " + lineCounter);
                      System.out.println("Total servers " + myServers.size() + " lines");

                      }
                      }
                      Last edited by leosweden; 2012-02-17, 22:35.

                      Kommentera


                      • #12
                        Det är bara JAVA

                        Om Du behöver loopa myServers, Gör så här:

                        for (String oneLine : myServers)
                        {
                        System.out.println(oneLine);
                        }

                        Det gör jobbet. Lycka till

                        OBS. 100 i koden betyder att en rad är längre en 100 characters +-. Alltså, de korta linjerna räknas inte.

                        För att köra programmet varje 10 min , använder du Thread.sleep(600000); dvs 600 seconds i milliseconds
                        Last edited by leosweden; 2012-02-17, 22:42.

                        Kommentera

                        Working...
                        X