Fedora ei lue java ohjelman luomia tiedostoja

Hei. Niin tälläinen ongelma on että kun teen java ohjelman joka kirjoittaa merkkijonoja tiedostoon niin ei gedit,nano, tai cat ohjelmakaan sitä osaa lukea.
Olen kokeillut useilla eri tiedostomuodoilla.
Kun avaan ohjelman nanolla tai catilla tulee erikoimerkkejä sun muuta ja kun geditillä avaan niin sanoo että gedit ei voi selvittää tiedoston koodausta.

Tässä olisi tämä lähdekoodi java ohjelmasta :

import java.io.*;
import java.util.Scanner;
public class tiedostokirjoitus {
public static void main(String[] args) {
String mj;
int l;

FileOutputStream fout = null;
DataOutputStream dout = null;

try {
  fout = new FileOutputStream("/home/manu/Työpöytä/tiedosto.rtf");
  dout = new DataOutputStream(fout);
  Scanner lukija = new Scanner(System.in);
  System.out.println("anna merkkijono");
  mj = lukija.next();
  System.out.println("anna luku");
  String lstr = lukija.next();
  lukija.close();
  
  
  dout.writeUTF(mj);
  dout.writeUTF(lstr);
}
catch(IOException e) {
  System.out.println("virhe");
}
finally {
  if (dout != null) {
    try {
      dout.close();
      System.out.println("tiedosto suljettiin onnistunesti");
    }
    catch(IOException e) {
      System.out.println("VIRHE");
    }
  }
}
System.exit(0);

}
}

koodissa voi olla joitain osia joissa ei ole mitään järkeä mutta vain sen takia että olen kokeillut eri asioita miten saisin koodin toimimaan.

Ei rajoitu ihan Fedoraan tämä vika, koska kirjoitat eri merkistökoodausta tiedostoon kuin millä se on avattu. Kirjoita mieluummin UTF-8 -tiedostoja näin:

....
    BufferedWriter dout = null;
....
    try {
      fout = new FileOutputStream("tiedosto.txt");
      dout = new BufferedWriter(new OutputStreamWriter(fout, "UTF8"));
     
      ....
      
      dout.write(mjono);
    }
....

Syöte kannattaa toki myös ottaa vastaan UTF-8:na.

Olen kokeillut useilla eri tiedostomuodoilla.
Tiedostomuoto ei määräydy sen päätteen mukaan, vaan sen [url=http://fi.wikipedia.org/wiki/Tiedostomuoto]koodauksen perusteella[/url].

Kiitos.

Ihan vain mielenkiinnosta että onko linuksissa mitään tapaa kirjoittaa tiedostoon niin että sen voi lukea selvästi, tuolla tavalla että käyttää
DataOutputStream luokkaa?

Sanoinkin tuossa edellisessä viestissäni väärin, koska:

public class DataOutputStream
extends FilterOutputStream
implements DataOutput

A data output stream lets an application write primitive Java data types to an output stream in a portable way. An application can then use a data input stream to read the data back in.

Eli DataOutputStream kirjoittaa Javan tietotyyppejä suoraan, eli tekstin kirjoittaminen sillä sellaisenaan ei onnistu.

Kiitos, mutta miten sitten lukujen kanssa?

Miten ne saa näkymään normaalisti UTF8 merkistöllä?
tai jos on joku muu koodaus kun UTF8 joka on fedorassa ja näyttää myös nuo luvut normaaleina niin kertokaa toki.

Kiitos jo etukäteen.

Mitä tarkoitat? Voit tallentaa numerot ihan tekstinä tiedostoon.

[quote=“MHFN, post:5, topic:900”]Kiitos, mutta miten sitten lukujen kanssa?

Miten ne saa näkymään normaalisti UTF8 merkistöllä?
tai jos on joku muu koodaus kun UTF8 joka on fedorassa ja näyttää myös nuo luvut normaaleina niin kertokaa toki.

Kiitos jo etukäteen.[/quote]

Err… jos tallennat luvut tekstinä, niin silloin tallentuu toki 16bittiä/merkki.

Taitaa olla hieman perusasiat haussa, ehkä olisi hyvä että lukisit sen java-ohjelmoinnin perusteet loppuun asti?


Eero

No itseasiassa ei tallennu, UTF-8:ssahan alkupään merkit (numerot, kirjaimet a-Z, ym.) tallentuvat 8-bittisinä, siitä nimikin.

MHFN: Käytä DataOutputStreamin sijaan FileOutputStreamia niin menevät sinne ihan merkkijonona niin aukeaa millä tahansa tekstieditorilla tai catilla tai millä vaan. Mutta kuten eero sanoi, joku alan kirja voisi olla paikallaan, tai nettitutoriaalien lukeminen. Onnea ohjelmointi- ja Linux-harrastusten pariin :slight_smile:

Niin siis sehän tässä onkin ongelmana että kirjan esimerkit eivät toimi tai minä ne väärin ymmärrän ja sen takia teiltä kysynkin kun tuolla FileOutputStreamilla ei saa näkymään tekstieditoreilla (tai ainakaan sillä tavalla kun kirjassa kerrotaan).
Ja tuo äskeinen esimerkki jossa käytetään BufferedWritea.

ps. tuon kirjat esimerkit on tehty windowsille että voisiko sillä olla vaikutusta.

pps.Olisi ihan kiva jos voisitte kertoa miten niitä kokonaislukuja ja liukulukuja voisi sinne tiedostoon kirjoittaa onnistuneesti niin voisin jatkaa tuon kirjan lukemista, Kiitos.

Javan pitäisi olla sikäli alustariippumaton, että esimerkit toimisivat joka paikassa. Ehkäpä esimerkkisi tarkoituksena ei olekaan tehdä tekstieditorilla luettavaa tavaraa, vaan tiedostoja jotka on helppo lukea javaohjelmaan takaisin, DataOutputStreamissa kun näyttää olevan kyse enemmänkin noiden valmiiden tietotyyppien serialisoinnista tiedostoon. Kokeilehan tätä esimerkkiä ja katso mitä tapahtuu.

Joskus tosiaan halutaan puskea suoraan lukuja ja muita primitiivityyppejä, tai jopa olioita sinne tiedostoon. Tällöin homma usein tehdään niin, että esim. lukujen binääriesitystä ei aukaista tekstimuotoon, vaan laitetaan vaan suoraan esim. ne int-tyypin neljä tavua sinne tiedostoon peräkkäin. Tämmöinen esitystapa ei tietenkään tekstieditorissa näytä nätiltä, ja voi usein sisältää semmoisiakin tavuja tai tavujonoja, mitkä eivät useimmissa tekstinkoodaustyyleissä ole ollenkaan luvallisia.

Eli jos haluat ihan tekstimuotoon niitä numeroita ja muuta, niin ne pitää ensin muuntaa merkkijonoksi ja sitten ne merkkijonot tallentaa tiedostoon. Siihen tässä onkin jo ylempänä aika hyvin vihjeitä.

OK. Nyt toimii ja kiitos kun jaksoitte selittää.