• 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
554 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 (269,590 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 (269,590 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 497 wizyt
pytanie zadane 6 listopada 2018 w C i C++ przez Szarp Początkujący (270 p.)
0 głosów
1 odpowiedź 374 wizyt
pytanie zadane 28 kwietnia 2018 w Java przez Niczit Nowicjusz (240 p.)
0 głosów
1 odpowiedź 580 wizyt
pytanie zadane 8 lipca 2020 w Java przez Szyszka Gaduła (3,490 p.)

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...