Симон Моурир дал этот пример :
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<>
экземпляров.
Просто измените PrintWriter out = new PrintWriter(log);
на
PrintWriter out = new PrintWriter(new FileWriter(log, true));
попробуйте этот
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();
}
}
Вот простой пример того, как это работает, лучше всего использовать 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();
BufferedWriter login = new BufferedWriter(new FileWriter("login.txt"));
является примером, если вы хотите создать файл в одной строке.
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);
`}
Вы даже можете использовать 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();
вместо этого использует 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!!");
}
По какой-то причине ни один из других методов не работал для меня ... Поэтому я пробовал это и работал. Надеюсь, это поможет.
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);
}