webForumDet fria alternativet

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

Java

11 svar · 2 774 visningar · startad av nigge

Medlem sedan feb. 2002199 inlägg
Frågan#1

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

Medlem sedan dec. 2009872 inlägg
#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?

Medlem sedan feb. 2002199 inlägg
#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?:-)=

Medlem sedan feb. 20126 inlägg
#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

Medlem sedan feb. 2002199 inlägg
#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...

Medlem sedan feb. 2002199 inlägg
#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....

Medlem sedan feb. 20126 inlägg
#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 LOWW:PILOT::44.8156:20.2914:345:0:1/GLF5...osv"

Annars loppar du rätt men ingen server hittas.

Medlem sedan feb. 2002199 inlägg
#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...

Medlem sedan feb. 20126 inlägg
#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

Medlem sedan feb. 2002199 inlägg
#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?:-)

Medlem sedan feb. 20126 inlägg
#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");

}

}

Medlem sedan feb. 20126 inlägg
#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

250 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)