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

Java odczyt danych z pliku

Object Storage Arubacloud
+1 głos
608 wizyt
pytanie zadane 26 kwietnia 2022 w Java przez cfaniaczek Nowicjusz (200 p.)

Cześć, szukam prostego sposobu na odczyt danych (liczby naturalne) oddzielonych przecinkami do tablicy. Będę chciał później znależć najmiejsza i najwieksza z nich ale to juz wiem jak zrobic. 

Poki co dotarlem do momentu tego ale zrobil mi sie juz tutaj niezly makaron i szukam sposobu zeby to uproscic: 

public class play {
	
	public static void main(String[] args) throws FileNotFoundException {
		File liczby = new File("przyklad.txt");
		Scanner scanner = new Scanner(liczby);
		int rozmiar = scanner.nextInt();
		int bazadanych[][] = new int [rozmiar][rozmiar];
		scanner.close();
		
		while(scanner.hasNext()) {
			for(int i=0; i<rozmiar; i++) {
				for(int j = 0; j < rozmiar ; j++) {
					bazadanych[i][j] = scanner.nextInt();
					System.out.print(bazadanych[i][j]);
				}
			}
		}
	}
}

 

1 odpowiedź

+1 głos
odpowiedź 26 kwietnia 2022 przez Wiciorny Ekspert (271,710 p.)
wybrane 27 kwietnia 2022 przez cfaniaczek
 
Najlepsza

Moja porada skorzystać z file - path.  Bez odczytu scannerem lini skoro masz plik, to powinieneś wczytać plik 

 int[][] turnFileIntoDataBase(Path filePath) throws IOException {
        //zalecam obsluge try with resources, 
        //dla zapewnienia gwarancji odczytu lub blok finally
        return Files.lines(filePath)
                .map((fileLine) -> fileLine.trim()
                        .split(","))
                .map((eachLineNumbers) -> Stream.of(eachLineNumbers)
                        .mapToInt(Integer::parseInt)
                        .toArray())
                .toArray(int[][]::new);
    }
 int bazadanych[][] = turnFileIntoDataBase(Paths.get("pathToSource/przyklad.txt"));

Tu masz różnice Path vs File 
https://www.baeldung.com/java-path-vs-file

Path fileFromPath = Paths.get("pathToSource/przyklad.txt");

Dla pliku z danymi : 

1,2,3,4,5,6,7
5,6,7,8,9,11,21


i przykładowym rozwiązaniu ( deepToString, po prostu mapuje mi do wyświetlenia na szybko, aby pokazać wynik ) 

    public static void main(String[] args) throws IOException {
        System.out.println(Arrays.deepToString(turnFileIntoDataBase(Paths.get(
                "numerki.txt"))));
    }

wynik programu : 

[
[1, 2, 3, 4, 5, 6, 7],
 [5, 6, 7, 8, 9, 11, 21]
]

 

wyświetli Ci odpowiednie dane, dodatkowo możesz odwołać się bezpośrednio do elementów. 

final int[][] ints = turnFileIntoDataBase(Paths.get(
                "numerki.txt"));
        System.out.println("arr" + ints[1][0]);
       //  2 rekord, 1 element [ liczba 5]

 

komentarz 27 kwietnia 2022 przez cfaniaczek Nowicjusz (200 p.)
Dziekuje! Super pomysl, na pewno wiele osob z tego skorzysta :D
komentarz 27 kwietnia 2022 przez cfaniaczek Nowicjusz (200 p.)
edycja 27 kwietnia 2022 przez cfaniaczek

@Wiciorny, 

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.stream.Stream;
 
public class task7 {
     
        public static void main(String[] args) throws IOException {
        System.out.println(Arrays.deepToString(turnFileIntoDataBase(Paths.get(
                "przykład.txt"))));
    }
        Path fileFromPath = Paths.get("przyklad.txt");
        
        int[][] turnFileIntoDataBase(Path fileFomPath) throws IOException {
               return Files.lines(fileFromPath)
                       .map((fileLine) -> fileLine.trim()
                               .split(","))
                       .map((eachLineNumbers) -> Stream.of(eachLineNumbers)
                               .mapToInt(Integer::parseInt)
                               .toArray())
                       .toArray(int[][]::new);
           }
        
        int bazadanych[][] = turnFileIntoDataBase(Paths.get("przyklad.txt"));

 
}

jakas literówka? jestem totalnie nowy w Java, troche mnie to przerasta :D

komentarz 29 kwietnia 2022 przez Wiciorny Ekspert (271,710 p.)
nie ma literówek, po prostu zauważ 2 rzeczy: tutaj odsyłam do podstaw Javy:
Po pierwsze u Ciebie funkcja jest elementem klasy, a próbujesz jej użyć w metodzie statycznej- więc albo zadeklaruj ją jako statyczną, albo utwórz obiekt - jako instancje klasy z odwołaniem.

Korzystaj z swojego środowiska, bo ten błąd na pewno jest odpowiednio wskazany przez twoje środowisko.
Daj znać czy sobie poradziłeś nie, to naprowadzę :) bardziej.

Podobne pytania

0 głosów
0 odpowiedzi 526 wizyt
pytanie zadane 6 listopada 2018 w C i C++ przez Szarp Początkujący (270 p.)
0 głosów
1 odpowiedź 382 wizyt
pytanie zadane 28 kwietnia 2018 w Java przez Niczit Nowicjusz (240 p.)
0 głosów
1 odpowiedź 611 wizyt
pytanie zadane 8 lipca 2020 w Java przez Szyszka Gaduła (3,490 p.)

92,666 zapytań

141,564 odpowiedzi

320,022 komentarzy

62,033 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!

...