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

Java z html odczyt pliku

Aruba Cloud - Virtual Private Server VPS
0 głosów
725 wizyt
pytanie zadane 8 lipca 2020 w Java przez Szyszka Gaduła (3,510 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 (280,470 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,510 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,260 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,510 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,260 p.)

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

komentarz 8 lipca 2020 przez Szyszka Gaduła (3,510 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 (280,470 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 1,223 wizyt
pytanie zadane 23 października 2019 w Java przez robert9620 Stary wyjadacz (11,640 p.)
+1 głos
2 odpowiedzi 677 wizyt
pytanie zadane 4 maja 2015 w Java przez Reflexip Początkujący (450 p.)
+1 głos
3 odpowiedzi 751 wizyt

93,336 zapytań

142,331 odpowiedzi

322,415 komentarzy

62,670 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...