• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java z html odczyt pliku

Object Storage Arubacloud
0 głosów
615 wizyt
pytanie zadane 8 lipca 2020 w Java przez Szyszka Gaduła (3,490 p.)

Witam. To jest kod w JSP: 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="pl.Szyszka.Main" %>
<!DOCTYPE html>
<html lang="pl">
<head>
    <link href=https://fonts.googleapis.com/css2?family=Roboto:wght@300&display=swap rel="stylesheet">
    <link type="text/css" rel="stylesheet" href=css/style.css>
    <title>WebApp1</title>
</head>
<body>
    <%=Main.getAndSaveLogin()%>
    <script src="js/script.js"></script>
    <center><input type="text" id="loginField" value="Nazwa użytkownika"></center>
    <center><input type="submit" id="register" value="Zarejestruj"></center>
</body>
</html>

A to w Javie:

package pl.Szyszka;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {
    public static String getAndSaveLogin() throws FileNotFoundException {
        File file = new File("db.txt");
        Scanner scanner = new Scanner(file);
        String line = scanner.nextLine();
        return line;
    }
}

Gdy próbuję wejść na stronę, pojawia się coś takiego: https://imgur.com/a/CnT3hbC

Dlaczego? Jak mam inaczej odczytać tekst z pliku txt? W Java SE wszystko działa po zamianie "return line" na "System.out.println(line)"

1
komentarz 8 lipca 2020 przez Wiciorny Ekspert (272,510 p.)

with Scanner you need to check if there is a next line with hasNextLine()
Sprawdzać powinieneś czy istnieje nowa linia to po pierwsze, po drugie pamięaj że po odczytaniu lini - skaner zostaje w tej samej czyli zwróci Ci błąd jeśli wywołasz to drugi raz bez usuwania cashe 


W Java SE wszystko działa po zamianie "return line" na "System.out.println(line)"

 Java SE a EE jest to, że Java Standard Edition (Java SE) to standardowa biblioteka Javy, a Java Enterprise Edition to, jak już wiecie, specyfikacje określające jak tworzyć aplikacje dla biznesu? Więc tez nie używaj nadwyraz slów których nie rozumiesz.


Używasz instancji skanera za każdym razem, co psuje rzeczy. Ustaw zmienną instancji, a nie lokalną, i powinieneś być w porządku - jeśli jej nie zamkniesz.

// close the scanner
      scanner.close();
komentarz 8 lipca 2020 przez Szyszka Gaduła (3,490 p.)
package pl.Szyszka;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {
    public static String getAndSaveLogin() throws FileNotFoundException {
        File file = new File("db.txt");
        Scanner scanner = new Scanner(file);
        String line = "";
        while(scanner.hasNext()) {
            line = scanner.nextLine();
            scanner.close();
            return line;
        }
        return line;
    }
}

Nie wiem, czy dobrze zrozumiałem, zrobiłem coś takiego, i nadal nie działa, zawsze zwraca się tylko "". Dlaczego?

komentarz 8 lipca 2020 przez mbabane Szeryf (79,280 p.)

@Szyszka,

A w pliku jest jakaś zawartość i czy na pewno wczytujesz właściwy plik?

Zaloguj sobie jaki path zawarty jest w file.

komentarz 8 lipca 2020 przez Szyszka Gaduła (3,490 p.)
Tak, ścieżka jest na pewno dobra, ponieważ w System.out.println wszystko działało, a zawartość pliku to:

Tekst linia jeden

Tekst linia dwa

Tekst linia trzy

Bez spacji też nie działało.
komentarz 8 lipca 2020 przez mbabane Szeryf (79,280 p.)

Czy przed Tekst linia jeden jest "enter" tj. pusta linia?

komentarz 8 lipca 2020 przez Szyszka Gaduła (3,490 p.)
edycja 8 lipca 2020 przez Szyszka

Nie ma.

Edit: Dopatrzyłem się, że program nie odnajduje linii. Udowodniłem to sobię tym kodem:

package pl.Szyszka;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {
    public static String getAndSaveLogin() throws FileNotFoundException {
        boolean line;
        String elo ="";
        File file = new File("db.txt");
        Scanner scanner = new Scanner(file);
        if(line = scanner.hasNextLine()) {
            scanner.close();
            elo = "TAK";
        }
        else{
            scanner.close();
            elo = "NIE";
        }
        return elo;
    }
}

Dlaczego tak się dzieje? :\

1 odpowiedź

0 głosów
odpowiedź 8 lipca 2020 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)

Próbowałeś coś takiego (linia 11)?

<%= pl.Szyszka.Main.getAndSaveLogin() %>

 

komentarz 8 lipca 2020 przez Wiciorny Ekspert (272,510 p.)

błąd wtedy by wskazywał na odwołanie funkcji, tutaj nawet wszystko działa plik jest ładowany poprawnie, problem polega na tym że kolega zapomniał o 

// close the scanner
      scanner.close();
// powinno się zawsze zamykać skaner 
1
komentarz 8 lipca 2020 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
W sumie racja, choć dziwne że to działa na JSE

Podobne pytania

0 głosów
2 odpowiedzi 860 wizyt
pytanie zadane 23 października 2019 w Java przez robert9620 Stary wyjadacz (11,640 p.)
+1 głos
2 odpowiedzi 614 wizyt
pytanie zadane 4 maja 2015 w Java przez Reflexip Początkujący (450 p.)
+1 głos
3 odpowiedzi 645 wizyt

92,698 zapytań

141,612 odpowiedzi

320,123 komentarzy

62,057 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...