Nom,Nom. Dałem w bat na sztywno "java -jar Notatnik.jar lol.txt" i wydrukowało. Teraz tylko jak teraz tego bata zrobić żeby brał nazwę pliku który go otwiera ;<
Uruchamiający plik .bat:
java -jar Notatnik.jar %1
To samo można wrzucić w rejestrze windy jako polecenie przypisane do konkretnego rozszerzenia/typu, ale wtedy warto użyć wywołania "javaw.exe", które nie tworzy zbędnej konsoli. Trzeba tylko pamiętać, że kiedy ręcznie wywołujesz, to nazwy plików ze spacjami muszą być w cudzysłowach. Przypisanie w rejestrze można wykonać za pomocą scalenia gotowego pliku .reg dla rejestrowania i wyrejestrowania, metod javy (musisz wygooglać) lub po prostu z łapy w edytorze rejestru.
To co wleci jako %1 będzie pełną ścieżką do pliku, który otworzysz za pomocą menu kontekstowego i znajdzie się w tablicy args[] wywołania programu javowego jako pierwszy i jedyny element.
Wtedy to otworzysz sobie jako plik. Ponieważ klasa File jest już w zasadzie przestarzała, to lepiej do tego celu użyć klasy FileChannel (oraz Files) ponieważ dzięki temu łatwo będzie można sobie wczytać cały plik do bufora (teksty rzadko przekraczają kilkaset KB). A następnie ustawiać kodowanie i dekodowanie wczytanego bufora przy pomocy klas Charset bo obsługa File koduje i dekoduje tylko domyślny Charset. Nie będziesz mógł sobie wtedy wybrać czy chcesz mieć plik zakodowany w: "UTF-16LE", "UTF-16BE", "UTF-16", "UTF-8", "windows-1250", "IBM852" lub "ISO-8859-2", a to w przypadku notatnika przydaje się. Weź pod uwagę, że nazwa pliku też może mieć znaki narodowe, więc jest zwykle zakodowana domyślnym dla JVM charsetem - ale w sumie nie musisz nic robić bo wszystkie teksty, które są już w pamięci mają z automatu kodowanie UTF-16LE, które jest standardowe dla Javy i przy operacjach plikowych nazwy są konwertowane do kodowania obowiązującego w systemie.
Przykład użycia:
String[] csnames =
{
"UTF-16LE", "UTF-16BE", "UTF-16", "UTF-8",
"windows-1250", "IBM852", "ISO-8859-2",
};
Map<String, Charset> available = Charset.availableCharsets();
String csn = csnnames[3]; //UTF-8 przykładowo
Charset cs = Charset.isSupported(csn) ? available.get(csn) : Charset.defaultCharset();
Path fn = dir.resolve(args[0]); //najpierw sprawdzić args.length
//przykład najprostszego zapisu zawartości do pliku o podanym kodowaniu
try (FileChannel file = FileChannel.open(fn, CREATE, WRITE))
{
file.write(cs.encode(CharBuffer.wrap("Jakiś polski tekst ąćęłńóśźż w kodowaniu " + cs.name() + "\r\n")));
}
catch(IOException ex)
{
//... błąd zapisu, w tym brak miejsca na dysku
}
//przykład odczytu z użyciem bufora na cały rozmiar pliku
try (FileChannel plik = FileChannel.open(fn))
{
int fileSize = file.size();
ByteBuffer bb = ByteBuffer.allocateDirect(fileSize);
if(bb == null)
//brak pamięci na bufor
int readBytes = file.read(buf);
if(readBytes == fileSize)
{
CharSequence charBuffer = cs.decode(bb); //dekodowanie bufora w kodowaniu cs, rozmiar będzie inny niż bb
//charBuffer zawiera zdekodowany z pliku tekst w UTF-16 i można go wrzucić do kontrolki tekstowej
}
else //wczytano mniej niż cały plik
{
//...
}
}
catch(IOException err)
{
//... błąd wczytywania
}
Przykłady z palca, tylko do ogarnięcia.