Java'da varolan bir dosyaya metin ekleme


Yanıtlar:


793

Bunu günlük kaydı için mi yapıyorsunuz? Eğer öyleyse bunun için birkaç kütüphane var . En popüler ikisi Log4j ve Logback'dir .

Java 7+

Bunu bir kez yapmanız gerekiyorsa, Files sınıfı bunu kolaylaştırır:

try {
    Files.write(Paths.get("myfile.txt"), "the text".getBytes(), StandardOpenOption.APPEND);
}catch (IOException e) {
    //exception handling left as an exercise for the reader
}

Dikkatli olun : Yukarıdaki yaklaşım NoSuchFileExceptiondosya yoksa bir atar . Ayrıca otomatik olarak bir satırsonu eklemez (bir metin dosyasına eklerken sık sık istediğiniz). Steve Chambers'ın cevabı bunu Filessınıfla nasıl yapabileceğinizi anlatıyor .

Ancak, aynı dosyaya birçok kez yazacaksanız, yukarıdakilerin diskteki dosyayı birçok kez açıp kapatması gerekir, bu yavaş bir işlemdir. Bu durumda, arabelleğe alınmış bir yazar daha iyidir:

try(FileWriter fw = new FileWriter("myfile.txt", true);
    BufferedWriter bw = new BufferedWriter(fw);
    PrintWriter out = new PrintWriter(bw))
{
    out.println("the text");
    //more code
    out.println("more text");
    //more code
} catch (IOException e) {
    //exception handling left as an exercise for the reader
}

Notlar:

  • Yapıcıya ikinci parametre FileWriter, yeni bir dosya yazmak yerine dosyaya eklemesini söyleyecektir. (Dosya yoksa, oluşturulur.)
  • Kullanarak BufferedWriterpahalı bir yazar (örneğin önerilir FileWriter).
  • A kullanmak , muhtemelen alıştığınız sözdizimine PrintWritererişmenizi sağlar .printlnSystem.out
  • Ancak BufferedWriterve PrintWritersarmalayıcıları kesinlikle gerekli değildir.

Eski Java

try {
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("myfile.txt", true)));
    out.println("the text");
    out.close();
} catch (IOException e) {
    //exception handling left as an exercise for the reader
}

İstisna işleme

Eski Java için sağlam bir istisna işlemeye ihtiyacınız varsa, çok ayrıntılı olur:

FileWriter fw = null;
BufferedWriter bw = null;
PrintWriter out = null;
try {
    fw = new FileWriter("myfile.txt", true);
    bw = new BufferedWriter(fw);
    out = new PrintWriter(bw);
    out.println("the text");
    out.close();
} catch (IOException e) {
    //exception handling left as an exercise for the reader
}
finally {
    try {
        if(out != null)
            out.close();
    } catch (IOException e) {
        //exception handling left as an exercise for the reader
    }
    try {
        if(bw != null)
            bw.close();
    } catch (IOException e) {
        //exception handling left as an exercise for the reader
    }
    try {
        if(fw != null)
            fw.close();
    } catch (IOException e) {
        //exception handling left as an exercise for the reader
    }
}

31
İstisna durumunda dosyanın kapatıldığından emin olmak için java7 kaynaklarla deneme veya close ()
komutunu sonlandırmanız gerekir

1
Java 7 sözdizimi ile güncellendi. istisna işleme hala okuyucu için bir alıştırma olarak bırakılır, ancak yorumu daha net hale getirir.
Kip

3
Bunun new BufferedWriter(...)bir istisna getirdiğini düşünelim ; Will FileWriterkapatılacak? Ben kapalı olmayacak sanırım, çünkü close()yöntem (normal koşullarda) outnesneye çağrılacak , hangi int bu durumda başlatılmayacak - bu yüzden aslında close()yöntem çağrılmayacak -> dosya açılacak, ama kapatılmaz. Yani IMHO tryifadesi try(FileWriter fw = new FileWriter("myFile.txt")){ Print writer = new ....//code goes here } şöyle görünmeli Ve bloktan flush()çıkmadan önce yazar olmalı try!!!
Svetlin Zarev

5
Dikkat: "Eski java" örneği, try bloğuna bir istisna atılırsa akışı düzgün şekilde kapatmaz.
Emily L.

1
Java 7 yöntemi ile birkaç olası "gotchas": (1) Dosya zaten yoksa, StandardOpenOption.APPENDoluşturmaz - bir istisna atmayacağından sessiz bir hata gibi. (2) Kullanılması .getBytes(), ekteki metinden önce veya sonra dönüş karakteri olmadığı anlamına gelir. Bunları ele almak için alternatif bir cevap ekledik .
Steve Chambers

166

Eklemek için olarak fileWriterayarlanmış bir bayrakla kullanabilirsiniz true.

try
{
    String filename= "MyFile.txt";
    FileWriter fw = new FileWriter(filename,true); //the true will append the new data
    fw.write("add a line\n");//appends the string to the file
    fw.close();
}
catch(IOException ioe)
{
    System.err.println("IOException: " + ioe.getMessage());
}

9
closeFileWriter'ın oluşturulması ve kapatılması arasında bir istisna oluşması durumunda finally, @ etech'in cevabında gösterildiği gibi blok içine yerleştirilmelidir .
Pshemo

5
"\ N" yerine yeni bir satır için System.getProperty ("line.separator") kullanmak daha iyi olmasına rağmen iyi yanıt.
Henry Zhu

@Decoded Düzenlemenizi bu yanıtta derlemediğim için geri aldım.
Kip

@Kip, Sorun neydi? Bir "yazım hatası" girmiş olmalıyım.
Dekoder

2
Kaynaklarla denemeler nasıl yapılır? try(FileWriter fw = new FileWriter(filename,true)){ // Whatever }catch(IOException ex){ ex.printStackTrace(); }
php_coder_3809625

72

Burada try / catch blokları olan tüm cevapların sonunda nihayet bloğunda bulunan .close () parçaları bulunmamalıdır mı?

İşaretli cevap örneği:

PrintWriter out = null;
try {
    out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)));
    out.println("the text");
} catch (IOException e) {
    System.err.println(e);
} finally {
    if (out != null) {
        out.close();
    }
} 

Ayrıca, Java 7'den itibaren, kaynaklarla dene ifadesi kullanabilirsiniz . Son olarak, otomatik olarak işlendiği ve daha az ayrıntılı olduğu için bildirilen kaynakların kapatılması için blok gerekli değildir:

try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)))) {
    out.println("the text");
} catch (IOException e) {
    System.err.println(e);
}

1
Ne zaman outkapsam dışına gider, çöp toplama işlemine, hakkını aldığında, otomatik olarak kapatılır? finallyBlok örneğinizde, out.close()doğru hatırladığımda aslında başka bir iç içe deneme / yakalama işlemine ihtiyacınız olduğunu düşünüyorum . Java 7 çözümü oldukça şık! (Java 6'dan beri herhangi bir Java geliştiricisi yapmıyorum, bu yüzden bu değişikliği bilmiyordum.)
Kip

1
@Kip Nope, kapsam dışına çıkmak Java'da hiçbir şey yapmaz. Dosya gelecekte rastgele bir zamanda kapanacaktır. (muhtemelen program kapandığında)
Navin

@etech İkinci yaklaşımın flushyönteme ihtiyacı olacak mı?
syfantid

43

Düzenleme - Apache Commons 2.1'den itibaren bunu yapmanın doğru yolu:

FileUtils.writeStringToFile(file, "String to append", true);

Sonunda dosyayı düzgün bir şekilde kapatacak şekilde @ Kip'in çözümünü uyarladım:

public static void appendToFile(String targetFile, String s) throws IOException {
    appendToFile(new File(targetFile), s);
}

public static void appendToFile(File targetFile, String s) throws IOException {
    PrintWriter out = null;
    try {
        out = new PrintWriter(new BufferedWriter(new FileWriter(targetFile, true)));
        out.println(s);
    } finally {
        if (out != null) {
            out.close();
        }
    }
}


5
Ohh, teşekkürler. Diğer tüm cevapların karmaşıklığı beni çok etkiledi. İnsanların neden (geliştirici) yaşamlarını karmaşıklaştırmaktan hoşlandıklarını gerçekten anlamıyorum.
Alphaaa

Bu yaklaşımdaki sorun, çıkış akımını her seferinde açıp kapatmasıdır. Dosyanıza ne ve ne sıklıkta yazdığınıza bağlı olarak, bu saçma bir yüke neden olabilir.
Buffalo

@Buffalo haklı. Ancak her zaman StringBuilder'ı dosyaya yazmadan önce büyük parçalar (yazmaya değer) oluşturmak için kullanabilirsiniz.
Konstantin K

32

Kip'in cevabını biraz genişletmek için , bir dosyaya yeni bir satır eklemek için basit bir Java 7+ yöntemi var ve zaten yoksa oluşturun :

try {
    final Path path = Paths.get("path/to/filename.txt");
    Files.write(path, Arrays.asList("New line to append"), StandardCharsets.UTF_8,
        Files.exists(path) ? StandardOpenOption.APPEND : StandardOpenOption.CREATE);
} catch (final IOException ioe) {
    // Add your own exception handling...
}

Not: Yukarıda , metin satırlarını bir dosyaya Files.writeyazan bir aşırı yükleme kullanılır (örn. Bir komuta benzer ). Yalnızca sonuna metin yazmak için (yani bir komuta benzer ), bir bayt dizisinden (örneğin ) geçen alternatif bir aşırı yük kullanılabilir .printlnprintFiles.write"mytext".getBytes(StandardCharsets.UTF_8)


Dosyanın var olup olmadığını kontrol etmeniz mi gerekiyor? .CREATEİşi senin için yaptığını sanıyordum .
LearningToJava

22

Akışın tüm senaryolarda düzgün şekilde kapatıldığından emin olun.

Bir hata durumunda bu cevaplardan kaç tanesinin dosya tanıtıcısını açık bırakması biraz endişe vericidir. Https://stackoverflow.com/a/15053443/2498188 Cevabı para için ama BufferedWriter()atma çünkü . O zaman bir istisna FileWriternesneyi açık bırakacaktır .

Bunu yapmanın umursamayan daha genel bir yolu BufferedWriter():

  PrintWriter out = null;
  BufferedWriter bw = null;
  FileWriter fw = null;
  try{
     fw = new FileWriter("outfilename", true);
     bw = new BufferedWriter(fw);
     out = new PrintWriter(bw);
     out.println("the text");
  }
  catch( IOException e ){
     // File writing/opening failed at some stage.
  }
  finally{
     try{
        if( out != null ){
           out.close(); // Will close bw and fw too
        }
        else if( bw != null ){
           bw.close(); // Will close fw too
        }
        else if( fw != null ){
           fw.close();
        }
        else{
           // Oh boy did it fail hard! :3
        }
     }
     catch( IOException e ){
        // Closing the file writers failed for some obscure reason
     }
  }

Düzenle:

Java 7'den itibaren, önerilen yol "kaynakları deneyin" kullanmak ve JVM'nin bununla başa çıkmasına izin vermektir:

  try(    FileWriter fw = new FileWriter("outfilename", true);
          BufferedWriter bw = new BufferedWriter(fw);
          PrintWriter out = new PrintWriter(bw)){
     out.println("the text");
  }  
  catch( IOException e ){
      // File writing/opening failed at some stage.
  }

Java 7 ile doğru ARM için +1. İşte bu zor tema hakkında iyi bir soru: stackoverflow.com/questions/12552863/… .
Vadzim

1
Hmm, nedense PrintWriter.close()olarak bildirilmedi throws IOExceptioniçinde docs . Kaynağına bakıldığında , close()yöntem gerçekten de atamaz IOException, çünkü onu altta yatan akıştan yakalar ve bir bayrak ayarlar. Dolayısıyla, bir sonraki Uzay Mekiği veya bir X-ışını doz ölçüm sistemi için kod üzerinde çalışıyorsanız, PrintWriter.checkError()denedikten sonra kullanmalısınız out.close(). Bu gerçekten belgelenmelidir.
Evgeni Sergeev

Eğer kapanma konusunda süper paranoyak olacaksak, bunların her biri XX.close()kendi deneme / yakalamada olmalı, değil mi? Örneğin, out.close()bir istisna atabilir, bu durumda bw.close()ve fw.close()asla çağrılmaz ve fwkapatmak için en kritik olanıdır.
Kip

13

Java-7'de de bu tür bir işlem yapılabilir:

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

// ---------------------

Path filePath = Paths.get("someFile.txt");
if (!Files.exists(filePath)) {
    Files.createFile(filePath);
}
Files.write(filePath, "Text to be added".getBytes(), StandardOpenOption.APPEND);

2
Gerekli ithalat nedir? Bunlar hangi kütüphaneyi kullanıyor?
Chetan Bhasin

9

java 7+

Sade bir java hayranı olduğum için alçakgönüllü görüşüme göre, bunun yukarıda belirtilen cevapların bir kombinasyonu olduğunu söyleyebilirim. Belki partiye geç kaldım. İşte kod:

 String sampleText = "test" +  System.getProperty("line.separator");
 Files.write(Paths.get(filePath), sampleText.getBytes(StandardCharsets.UTF_8), 
 StandardOpenOption.CREATE, StandardOpenOption.APPEND);

Dosya yoksa, dosyayı oluşturur ve zaten varsa , mevcut dosyaya sampleText öğesini ekler . Bunu kullanarak, sınıf yolunuza gereksiz kütüphaneler eklemekten kurtarırsınız.


8

Bu tek bir kod satırında yapılabilir. Bu yardımcı olur umarım :)

Files.write(Paths.get(fileName), msg.getBytes(), StandardOpenOption.APPEND);

1
yeterli olmayabilir :) daha iyi sürümü Files.write (Paths.get (dosyaAdı), msg.getBytes (), StandardOpenOption.APPEND, StandardOpenOption.CREATE);
evg345

6

Java.nio kullanma. Dosyalar java.nio.file ile birlikte. StandardOpenOption

    PrintWriter out = null;
    BufferedWriter bufWriter;

    try{
        bufWriter =
            Files.newBufferedWriter(
                Paths.get("log.txt"),
                Charset.forName("UTF8"),
                StandardOpenOption.WRITE, 
                StandardOpenOption.APPEND,
                StandardOpenOption.CREATE);
        out = new PrintWriter(bufWriter, true);
    }catch(IOException e){
        //Oh, no! Failed to create PrintWriter
    }

    //After successful creation of PrintWriter
    out.println("Text to be appended");

    //After done writing, remember to close!
    out.close();

Bu, parametreleri BufferedWriterkabul eden bir Dosyalar kullanarak ve ortaya StandardOpenOptionçıkandan otomatik bir yıkama PrintWriteroluşturur BufferedWriter. PrintWriter's println()yöntemi, daha sonra dosyaya yazmak için çağrılabilir.

StandardOpenOptionBu kodda kullanılan parametreler: Sadece dosyaya ekler, yazma dosyayı açar ve bu yoksa dosya oluşturur.

Paths.get("path here")ile değiştirilebilir new File("path here").toPath(). Ve Charset.forName("charset name")istenilen barındıracak şekilde modifiye edilebilir Charset.


5

Sadece küçük detaylar ekliyorum:

    new FileWriter("outfilename", true)

2.nd parametresi (true), eklenebilir ( http://docs.oracle.com/javase/7/docs/api/java/lang/Appendable.html ) adı verilen bir özelliktir (veya arayüz ). Belirli bir dosyanın / akışın sonuna içerik ekleyebilmekten sorumludur. Bu arayüz Java 1.5'ten beri uygulanmaktadır. Bu arabirime sahip her nesne (yani BufferedWriter, CharArrayWriter, CharBuffer, FileWriter, FilterWriter, LogStream, OutputStreamWriter, PipedWriter, PrintStream, PrintWriter, StringBuffer, StringBuilder, StringWriter, Writer ) içerik eklemek için kullanılabilir

Başka bir deyişle, gzip edilmiş dosyanıza bir miktar içerik veya bir miktar http işlemi ekleyebilirsiniz.


4

Guava kullanarak örnek:

File to = new File("C:/test/test.csv");

for (int i = 0; i < 42; i++) {
    CharSequence from = "some string" + i + "\n";
    Files.append(from, to, Charsets.UTF_8);
}

13
Bu korkunç bir tavsiye. Bir akışı bir kez yerine 42 kez açarsınız.
xehpuk

3
@ xehpuk iyi, duruma göre değişir. 42 kodu hala daha okunaklı hale getirirse hala iyidir. 42k kabul edilemez.
dantuch

4

BufferFileWriter.append ile deneyin, benimle çalışıyor.

FileWriter fileWriter;
try {
    fileWriter = new FileWriter(file,true);
    BufferedWriter bufferFileWriter = new BufferedWriter(fileWriter);
    bufferFileWriter.append(obj.toJSONString());
    bufferFileWriter.newLine();
    bufferFileWriter.close();
} catch (IOException ex) {
    Logger.getLogger(JsonTest.class.getName()).log(Level.SEVERE, null, ex);
}

obj.toJSONString () burada ne var?
Bhaskara Arani

@BhaskaraArani Sadece bir dize, bir dizeye dönüştürülmüş bir JSON nesnesinin bir örneğini koydu, ancak fikir herhangi bir dize olabileceğidir.
Gherbi Hicham

3
    String str;
    String path = "C:/Users/...the path..../iin.txt"; // you can input also..i created this way :P

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    PrintWriter pw = new PrintWriter(new FileWriter(path, true));

    try 
    {
       while(true)
        {
            System.out.println("Enter the text : ");
            str = br.readLine();
            if(str.equalsIgnoreCase("exit"))
                break;
            else
                pw.println(str);
        }
    } 
    catch (Exception e) 
    {
        //oh noes!
    }
    finally
    {
        pw.close();         
    }

bu ne istersen yapacak ..


3

Java-7 öncesi nihayet iş sonra kaynakları ile deneyin daha iyi

static void appendStringToFile(Path file, String s) throws IOException  {
    try (BufferedWriter out = Files.newBufferedWriter(file, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) {
        out.append(s);
        out.newLine();
    }
}

3

Java 7 ve üstünü kullanıyorsanız ve dosyaya eklenecek (eklenmiş) içeriği de biliyorsanız, NIO paketinde newBufferedWriter yöntemini kullanabiliriz .

public static void main(String[] args) {
    Path FILE_PATH = Paths.get("C:/temp", "temp.txt");
    String text = "\n Welcome to Java 8";

    //Writing to the file temp.txt
    try (BufferedWriter writer = Files.newBufferedWriter(FILE_PATH, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) {
        writer.write(text);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Unutulmaması gereken birkaç nokta vardır:

  1. Karakter kodlamasını belirlemek her zaman iyi bir alışkanlıktır ve bunun için sınıfta sabitiz vardır StandardCharsets.
  2. Kod try-with-resource, denemeden sonra kaynakların otomatik olarak kapatıldığı ifadeyi kullanır .

OP sormasa da, belirli bir anahtar kelimeye sahip satırları aramak istediğimizde, örneğin confidentialJava'da akış API'lerini kullanabiliriz:

//Reading from the file the first line which contains word "confidential"
try {
    Stream<String> lines = Files.lines(FILE_PATH);
    Optional<String> containsJava = lines.filter(l->l.contains("confidential")).findFirst();
    if(containsJava.isPresent()){
        System.out.println(containsJava.get());
    }
} catch (IOException e) {
    e.printStackTrace();
}

bir uyarı: BufferedWriter kullanılırken write(String string), yazılan her dizeden sonra yeni bir satır newLine()beklenirse, çağrılmalıdır
yongtw123

3
FileOutputStream fos = new FileOutputStream("File_Name", true);
fos.write(data);

true, mevcut dosyaya veri eklenmesine izin verir. Yazacaksak

FileOutputStream fos = new FileOutputStream("File_Name");

Mevcut dosyanın üzerine yazılır. Bu yüzden ilk yaklaşıma gidin.


3
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class Writer {


    public static void main(String args[]){
        doWrite("output.txt","Content to be appended to file");
    }

    public static void doWrite(String filePath,String contentToBeAppended){

       try(
            FileWriter fw = new FileWriter(filePath, true);
            BufferedWriter bw = new BufferedWriter(fw);
            PrintWriter out = new PrintWriter(bw)
          )
          {
            out.println(contentToBeAppended);
          }  
        catch( IOException e ){
        // File writing/opening failed at some stage.
        }

    }

}

Yukarıdaki, bu bağlantıda sunulan çözümün sadece kısa bir örnek uygulamasıdır . Böylece, kodu kopyalayıp çalıştırabilir ve nasıl çalıştığını hemen görebilirsiniz, output.out dosyasının Writer.java dosyasıyla aynı dizinde olduğundan emin olun
David Charles

2
FileOutputStream stream = new FileOutputStream(path, true);
try {

    stream.write(

        string.getBytes("UTF-8") // Choose your encoding.

    );

} finally {
    stream.close();
}

Sonra, yukarı yönde bir yerde bir IOException yakalayın.


2

Projenizde herhangi bir yerde bir işlev oluşturun ve ihtiyacınız olan yerde bu işlevi çağırın.

Çocuklar, eşzamansız olarak aramamanız gereken aktif konuları aradığınızı ve doğru şekilde yapılması için 5 ila 10 sayfa olması muhtemel olduğunu hatırlamanız gerekir. Neden projeniz için daha fazla zaman harcamayın ve daha önce yazılmış bir şeyi yazmayı unutma. Uygun şekilde

    //Adding a static modifier would make this accessible anywhere in your app

    public Logger getLogger()
    {
       return java.util.logging.Logger.getLogger("MyLogFileName");
    }
    //call the method anywhere and append what you want to log 
    //Logger class will take care of putting timestamps for you
    //plus the are ansychronously done so more of the 
    //processing power will go into your application

    //from inside a function body in the same class ...{...

    getLogger().log(Level.INFO,"the text you want to append");

    ...}...
    /*********log file resides in server root log files********/

üç satır kod iki gerçekten üçte biri aslında metin ekler. : P


2

Kütüphane

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

kod

public void append()
{
    try
    {
        String path = "D:/sample.txt";

        File file = new File(path);

        FileWriter fileWriter = new FileWriter(file,true);

        BufferedWriter bufferFileWriter  = new BufferedWriter(fileWriter);

        fileWriter.append("Sample text in the file to append");

        bufferFileWriter.close();

        System.out.println("User Registration Completed");

    }catch(Exception ex)
    {
        System.out.println(ex);
    }
}

2

Bunu da deneyebilirsiniz:

JFileChooser c= new JFileChooser();
c.showOpenDialog(c);
File write_file = c.getSelectedFile();
String Content = "Writing into file"; //what u would like to append to the file



try 
{
    RandomAccessFile raf = new RandomAccessFile(write_file, "rw");
    long length = raf.length();
    //System.out.println(length);
    raf.setLength(length + 1); //+ (integer value) for spacing
    raf.seek(raf.length());
    raf.writeBytes(Content);
    raf.close();
} 
catch (Exception e) {
    //any exception handling method of ur choice
}


1

Aşağıdaki yöntem bazı dosyalara metin eklemenizi sağlar:

private void appendToFile(String filePath, String text)
{
    PrintWriter fileWriter = null;

    try
    {
        fileWriter = new PrintWriter(new BufferedWriter(new FileWriter(
                filePath, true)));

        fileWriter.println(text);
    } catch (IOException ioException)
    {
        ioException.printStackTrace();
    } finally
    {
        if (fileWriter != null)
        {
            fileWriter.close();
        }
    }
}

Alternatif olarak FileUtils:

public static void appendToFile(String filePath, String text) throws IOException
{
    File file = new File(filePath);

    if(!file.exists())
    {
        file.createNewFile();
    }

    String fileContents = FileUtils.readFileToString(file);

    if(file.length() != 0)
    {
        fileContents = fileContents.concat(System.lineSeparator());
    }

    fileContents = fileContents.concat(text);

    FileUtils.writeStringToFile(file, fileContents);
}

Verimli değil ama iyi çalışıyor. Satır kesmeleri doğru şekilde işleniyor ve henüz yoksa yeni bir dosya oluşturulur.



1

Eğer istediğiniz BELİRLİ HATLARINDA BAZI METİN ADD istediğiniz ve kod aşağıda olduğu gibi daha sonra üzerine yazma her şey her yerde metin ekleyin, önce tüm dosyayı okuyabilir:

public static void addDatatoFile(String data1, String data2){


    String fullPath = "/home/user/dir/file.csv";

    File dir = new File(fullPath);
    List<String> l = new LinkedList<String>();

    try (BufferedReader br = new BufferedReader(new FileReader(dir))) {
        String line;
        int count = 0;

        while ((line = br.readLine()) != null) {
            if(count == 1){
                //add data at the end of second line                    
                line += data1;
            }else if(count == 2){
                //add other data at the end of third line
                line += data2;
            }
            l.add(line);
            count++;
        }
        br.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }       
    createFileFromList(l, dir);
}

public static void createFileFromList(List<String> list, File f){

    PrintWriter writer;
    try {
        writer = new PrintWriter(f, "UTF-8");
        for (String d : list) {
            writer.println(d.toString());
        }
        writer.close();             
    } catch (FileNotFoundException | UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

0

Cevabım:

JFileChooser chooser= new JFileChooser();
chooser.showOpenDialog(chooser);
File file = chooser.getSelectedFile();
String Content = "What you want to append to file";

try 
{
    RandomAccessFile random = new RandomAccessFile(file, "rw");
    long length = random.length();
    random.setLength(length + 1);
    random.seek(random.length());
    random.writeBytes(Content);
    random.close();
} 
catch (Exception exception) {
    //exception handling
}

0
/**********************************************************************
 * it will write content to a specified  file
 * 
 * @param keyString
 * @throws IOException
 *********************************************************************/
public static void writeToFile(String keyString,String textFilePAth) throws IOException {
    // For output to file
    File a = new File(textFilePAth);

    if (!a.exists()) {
        a.createNewFile();
    }
    FileWriter fw = new FileWriter(a.getAbsoluteFile(), true);
    BufferedWriter bw = new BufferedWriter(fw);
    bw.append(keyString);
    bw.newLine();
    bw.close();
}// end of writeToFile()

-1

Follong kodunu dosyaya içerik eklemek için kullanabilirsiniz:

 String fileName="/home/shriram/Desktop/Images/"+"test.txt";
  FileWriter fw=new FileWriter(fileName,true);    
  fw.write("here will be you content to insert or append in file");    
  fw.close(); 
  FileWriter fw1=new FileWriter(fileName,true);    
 fw1.write("another content will be here to be append in the same file");    
 fw1.close(); 

-1

1.7 Yaklaşım:

void appendToFile(String filePath, String content) throws IOException{

    Path path = Paths.get(filePath);

    try (BufferedWriter writer = 
            Files.newBufferedWriter(path, 
                    StandardOpenOption.APPEND)) {
        writer.newLine();
        writer.append(content);
    }

    /*
    //Alternative:
    try (BufferedWriter bWriter = 
            Files.newBufferedWriter(path, 
                    StandardOpenOption.WRITE, StandardOpenOption.APPEND);
            PrintWriter pWriter = new PrintWriter(bWriter)
            ) {
        pWriter.println();//to have println() style instead of newLine();   
        pWriter.append(content);//Also, bWriter.append(content);
    }*/
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.