Trädvy Permalänk
Medlem
Registrerad
Maj 2012

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

Trädvy Permalänk
Medlem
Registrerad
Apr 2002
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]

AMD Ryzen7 3800X || Gigabyte X570 Ultra || Evga GTX 1080Ti || Crucial Ballistix Sport 3200 64GB || Samsung 950 Pro 512GB || Samsung 960 Pro 1024GB || XB270HU 1440p IPS G-Sync

Trädvy Permalänk
Medlem
Registrerad
Sep 2007

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(); }

Kom-pa-TI-bilitet

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Dec 2010

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

i5-7600k . GTX 1080 . 16 GB

Och

En sleten laptop

Trädvy Permalänk
Medlem
Registrerad
Maj 2012

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.

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Dec 2010

@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

i5-7600k . GTX 1080 . 16 GB

Och

En sleten laptop

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2009
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

NZXT H2, OCZ ModXStream-PRO 600W, MSI P67A-C45, Intel i5 2500K @ 4.4GHz, Gigabyte GTX 460, 4GB Corsair Vengeance DDR3 1600MHz CL9 (2x2GB), OCZ Agility 60GB, Seagate Barracuda 250GB, 2x Western Digital Caviar 1TB

Trädvy Permalänk
Medlem
Registrerad
Maj 2012

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

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Dec 2010
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?

i5-7600k . GTX 1080 . 16 GB

Och

En sleten laptop

Trädvy Permalänk
Medlem
Registrerad
Maj 2012
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