Permalänk

Java PrintWriter.

Hej!

Jag håller på med en uppgift i kursen programmering 2. Målet med uppgiften är att en användare ska få skriva information från cmd till en txt fil. Jag har stångat mitt huvud blodigt på hur jag ska få till en lösning där användaren själv får ange vad .txt-filen ska heta.
I den information jag än så länge har införskaffat mig så verkar funktionen PrintWriter vara en bra lösning, men jag får det inte att fungera.
Jag har försökt koppla en readline till FileWriter, men det vill sig inte. Hoppas informationen jag har skrivit är tillräcklig för att ni ska förstå mitt problem. Jag är inte ute efter att någon ska göra min uppgift åt mig, men det hade varit toppen om någon skulle kunna ge mig lite tips på hur jag kan gå till väga och för att jag ska förstå funktionen.

Mvh

Permalänk
Medlem
Skrivet av trumanshow:

Hej!

Jag håller på med en uppgift i kursen programmering 2. Målet med uppgiften är att en användare ska få skriva information från cmd till en txt fil. Jag har stångat mitt huvud blodigt på hur jag ska få till en lösning där användaren själv får ange vad .txt-filen ska heta.
I den information jag än så länge har införskaffat mig så verkar funktionen PrintWriter vara en bra lösning, men jag får det inte att fungera.
Jag har försökt koppla en readline till FileWriter, men det vill sig inte. Hoppas informationen jag har skrivit är tillräcklig för att ni ska förstå mitt problem. Jag är inte ute efter att någon ska göra min uppgift åt mig, men det hade varit toppen om någon skulle kunna ge mig lite tips på hur jag kan gå till väga och för att jag ska förstå funktionen.

Mvh

Tror det skulle hjälpa om du visar ditt försök om någon ska försöka hjälpa att reda ut det där. (snarare än att någon hittar på en egen lösning, vilket väl skulle göra hela tråden meningslös)

Använd:

[code]
kod här
[/code]

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem

För ett konsolverktyg kan du läsa argumenten som användaren kör ditt program med. För enkelhets skull kan vi anta att första argumentet är filnamnet och resterande argument är rader av text som ska skrivas till filen. Det blir något åt det här hållet:

// exkluderar klassdefinition, importer och felhantering för att göra exemplet kortare public static void main(String[] args) { String filename = args[0]; File outputFile = new File(filename); PrintWriter output = new PrintWriter(outputFile); for (int i=1; i < args.length; i++) { output.println(args[i]); } output.close(); }

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Förstår inte riktigt. File tar ju en sträng? Läs in vad användaren vill att filen ska heta lagra det i en sträng och sen åkalla file konstuktorn med den strängen som variabel. Det finns många filnamn som inte är tillåtna i Windows, och andra orsaker, så glöm inte try-catch.

https://docs.oracle.com/javase/7/docs/api/java/io/File.html

Visa signatur

i5-7600k . GTX 1080 . 16 GB

Permalänk

import java.io.*; import java.nio.Buffer; import java.util.Scanner; public class fil { public static void main(String[] args) throws IOException { System.out.println("Ange ett filnamn"); Scanner sc = new Scanner(System.in); String fil = sc.nextLine(); System.out.println(fil); PrintWriter sparaFil = new PrintWriter( new BufferedWriter( new FileWriter(fil))); while(true) { fil.println(); } } }

Så här ser det ut för tillfället.
Jag har lyckats få printwriter till att spara en fil som användaren skriver in. Men jag kommer inte vidare efter det här. Jag förstår liksom inte hur inmatningar från tangentbordet kommer hamna i txt filen.

Permalänk
Medlem

@trumanshow: Döp inte en variabel "fil" i en klass "fil".

Du måste också någonstans ha ett fil.write(sträng) om du vill att det ska hamna något i filen.

https://www.w3schools.com/java/java_files_create.asp andra stycket

Visa signatur

i5-7600k . GTX 1080 . 16 GB

Permalänk
Skrivet av trumanshow:

import java.io.*; import java.nio.Buffer; import java.util.Scanner; public class fil { public static void main(String[] args) throws IOException { System.out.println("Ange ett filnamn"); Scanner sc = new Scanner(System.in); String fil = sc.nextLine(); System.out.println(fil); PrintWriter sparaFil = new PrintWriter( new BufferedWriter( new FileWriter(fil))); while(true) { fil.println(); } } }

Så här ser det ut för tillfället.
Jag har lyckats få printwriter till att spara en fil som användaren skriver in. Men jag kommer inte vidare efter det här. Jag förstår liksom inte hur inmatningar från tangentbordet kommer hamna i txt filen.

Du ser ut att vara på rätt väg. Där du startar en oändlig loop behöver du, istället för att bara skriva fil.println();, igen läsa in text från användaren som du gjort tidigare i koden, och lägga in den texten i filen. Du behöver också något sätt att komma ur den loopen, tex om användaren skriver "stopp" eller något liknande.
Jag är inte helt hundra på hur FileWriter funkar, men jag misstänker att metoden fil.println() borde kunna ta en String som argument och lägga till den texten till filen, tex alltså fil.println(userText);.

Hoppas det hjälper lite

Permalänk

Tusen tack för all er hjälp och era användbara tips! Så här blev slutresultatet.

import java.io.*; import java.util.Scanner; public class tillFil { public static void main(String[] args) throws IOException { int slutText = 0; int inmatning = 0; String loc = "C:/Users/mtrum/OneDrive/Skrivbord/text/"; System.out.println("Ange ett filnamn"); Scanner sc = new Scanner(System.in); String fil = sc.nextLine(); PrintWriter slutFil = new PrintWriter (new BufferedWriter (new FileWriter(loc + fil + ".txt", true))); System.out.println("Vad vill du skriva? \nOm du vill avsluta inmatning tryck enter vid tom rad."); while (inmatning >= 0) { Scanner text = new Scanner(System.in); String tillText = text.nextLine(); slutFil.println(tillText); slutFil.close(); slutText = tillText.length(); inmatning++; if (slutText == 0) { System.out.println("Din text har sparats till: " + loc + fil+ ".txt"); slutFil.close(); break; } } } }

Jag är i det hela ganska nöjd med hur det blev. Det enda som jag tycker är lite tråkigt är att när man skriver in text i cmd och trycker enter för att skriva en ny rad så sparas bara den första raden ner till dokumentet. Är det någon som har vetskap och lust att förklara varför det blir så?

Mvh

Permalänk
Medlem
Skrivet av trumanshow:

Tusen tack för all er hjälp och era användbara tips! Så här blev slutresultatet.

import java.io.*; import java.util.Scanner; public class tillFil { public static void main(String[] args) throws IOException { int slutText = 0; int inmatning = 0; String loc = "C:/Users/mtrum/OneDrive/Skrivbord/text/"; System.out.println("Ange ett filnamn"); Scanner sc = new Scanner(System.in); String fil = sc.nextLine(); PrintWriter slutFil = new PrintWriter (new BufferedWriter (new FileWriter(loc + fil + ".txt", true))); System.out.println("Vad vill du skriva? \nOm du vill avsluta inmatning tryck enter vid tom rad."); while (inmatning >= 0) { Scanner text = new Scanner(System.in); String tillText = text.nextLine(); slutFil.println(tillText); slutFil.close(); slutText = tillText.length(); inmatning++; if (slutText == 0) { System.out.println("Din text har sparats till: " + loc + fil+ ".txt"); slutFil.close(); break; } } } }

Jag är i det hela ganska nöjd med hur det blev. Det enda som jag tycker är lite tråkigt är att när man skriver in text i cmd och trycker enter för att skriva en ny rad så sparas bara den första raden ner till dokumentet. Är det någon som har vetskap och lust att förklara varför det blir så?

Mvh

slutFil.close();

Du stänger filen direkt.

Edit: Det ar antagligen din "text" scanner du vill stänga där?

Visa signatur

i5-7600k . GTX 1080 . 16 GB

Permalänk
Skrivet av johanandersson:

slutFil.close();

Du stänger filen direkt.

Edit: Det ar antagligen din "text" scanner du vill stänga där?

Tack! Jag antar att jag blev blind efter att ha suttit för länge