Java перезаписывает файлы в цикле [duplicate]

Симон Моурир дал этот пример :

object o = null;
DateTime d = (DateTime)o;  // NullReferenceException

, где unboxing преобразование (литье) из object (или из одного из классов System.ValueType или System.Enum или из типа интерфейса) - тип значения (кроме Nullable<>) сам по себе дает NullReferenceException.

В другом направлении конверсия бокса из a Nullable<>, которая имеет HasValue, равную false , на ссылочный тип, может дать ссылку null, которая затем может привести к NullReferenceException. Классический пример:

DateTime? d = null;
var s = d.ToString();  // OK, no exception (no boxing), returns ""
var t = d.GetType();   // Bang! d is boxed, NullReferenceException

Иногда бокс происходит по-другому. Например, с помощью этого не общего метода расширения:

public static void MyExtension(this object x)
{
  x.ToString();
}

следующий код будет проблематичным:

DateTime? d = null;
d.MyExtension();  // Leads to boxing, NullReferenceException occurs inside the body of the called method, not here.

Эти случаи возникают из-за специальных правил, используемых во время выполнения при боксе Nullable<> экземпляров.

18
задан rmp2150 1 April 2012 в 02:49
поделиться

8 ответов

Просто измените PrintWriter out = new PrintWriter(log); на

PrintWriter out = new PrintWriter(new FileWriter(log, true));
35
ответ дан Zach Saucier 27 August 2018 в 20:12
поделиться

попробуйте этот

public void writeFile(String arg1,String arg2) {
		try {
			if (!dir.exists()) {

				if (dir.mkdirs()) {

					Toast.makeText(getBaseContext(), "Directory created",
							Toast.LENGTH_SHORT).show();
				} else {
					Toast.makeText(getBaseContext(),
							"Error writng file " + filename, Toast.LENGTH_LONG)
							.show();
				}
			}

			else {

				File file = new File(dir, filename);
				if (!file.exists()) {
					file.createNewFile();
				}
				
				FileWriter fileWritter = new FileWriter(file, true);
				BufferedWriter bufferWritter = new BufferedWriter(fileWritter);
				bufferWritter.write(arg1 + "\n");
				bufferWritter.close();

            } catch (Exception e) {
			e.printStackTrace();
			Toast.makeText(getBaseContext(),
					"Error writng file " + e.toString(), Toast.LENGTH_LONG)
					.show();
		}

	}

0
ответ дан Ameen Maheen 27 August 2018 в 20:12
поделиться

Вот простой пример того, как это работает, лучше всего использовать try \ catch в нем, но для базового использования это должно сделать трюк. Для этого у вас есть строка и путь к файлу и примените это к FileWriter и BufferedWriter. Это напишет «Hello World» (переменная данных), а затем создаст новую строку. каждый раз, когда это выполняется, он добавляет переменную Data в следующую строку.

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


String Data = "Hello World";
File file = new File("C:/Users/stuff.txt");
FileWriter fw = new FileWriter(file,true);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(Data);
bw.newLine();
bw.close();
1
ответ дан Grbe1l 27 August 2018 в 20:12
поделиться
BufferedWriter login = new BufferedWriter(new FileWriter("login.txt"));

является примером, если вы хотите создать файл в одной строке.

0
ответ дан Ralf Stubner 27 August 2018 в 20:12
поделиться
JFileChooser c= new JFileChooser();
c.showOpenDialog(c);
File write_file = c.getSelectedFile();
String Content = "put here the data to be wriiten";
try
    {
    FileWriter fw = new FileWriter(write_file);
    BufferedWriter bw = new BufferedWriter(fw);
    bw.append(Content);
    bw.append("hiiiii");
    bw.close();
    fw.close();
    }
catch(Exception e)
   {
    System.out.println(e);
   `}
2
ответ дан Rohit ZP 27 August 2018 в 20:12
поделиться

Вы даже можете использовать FileOutputStream, чтобы получить то, что вам нужно. Вот как это можно сделать,

File file = new File(Environment.getExternalStorageDirectory(), "abc.txt");
FileOutputStream fOut = new FileOutputStream(file, true);
OutputStreamWriter osw = new OutputStreamWriter(fOut);
osw.write("whatever you need to write");
osw.flush();
osw.close();
0
ответ дан Shruti Dasgopal 27 August 2018 в 20:12
поделиться

вместо этого использует FileWriter.

FileWriter(File file, boolean append)

второй аргумент в конструкторе сообщает FileWriter добавлять любой файл в файл, а не перезаписывать его.

вот некоторые код для вашего примера:

File log = new File("log.txt")

try{
    if(!log.exists()){
        System.out.println("We had to make a new file.");
        log.createNewFile();
    }

    FileWriter fileWriter = new FileWriter(log, true);

    BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
    bufferedWriter.write("******* " + timeStamp.toString() +"******* " + "\n");
    bufferedWriter.close();

    System.out.println("Done");
} catch(IOException e) {
    System.out.println("COULD NOT LOG!!");
}
9
ответ дан thrau 27 August 2018 в 20:12
поделиться

По какой-то причине ни один из других методов не работал для меня ... Поэтому я пробовал это и работал. Надеюсь, это поможет.

JFileChooser c= new JFileChooser();
c.showOpenDialog(c);
File write_file = c.getSelectedFile();
String Content = "Writing into file\n hi \n hello \n hola";
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) {
    System.out.println(e);
}
2
ответ дан userAsh 27 August 2018 в 20:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: