This question already has answers here:
How to create text file and insert data to that file on Android
(5 answers)
Closed 4 years ago.
how to write a text file in a public storage that it was visible for other apps. i.e. file manager.
what is wrong with my code.
String filename = "kontaktebi123.vcf";
FileOutputStream outputStream;
try {
outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
PrintWriter osw = new PrintWriter(outputStream);
ArrayList<String> nomrebi = numberGenerator(view);
osw.printf("blablabla")
osw.flush();
osw.close();
} catch (Exception e) {
e.printStackTrace();
}
You have to write the file in public directory like Document, Download or others.
String fileDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
String fileName = "kontaktebi123.vcf";
File file = new File(fileDir + "/" + fileName);
Now write in the file and it will be visible to other apps.
try{
FileOutputStream fileOutStream = openFileOutput(fileName.txt",MODE_PRIVATE);
OutputStreamWriter outputWriter = new OutputStreamWriter(fileOutStream);
outputWriter.write("write your text here");
outputWriter.close();
Toast.maketext(context,"File Saved Successfully",Toast.LENGTH_SHORT).show();
}catch(Exception e){
e.printStackTrace();
}
Related
I am using print writer and fileoutputstream to write a file in android async task using following function:
public static void saveFileToExternalMemoryAsync(Context context,String fileName, String json)throws Exception{
File AppPath = new File(Environment.getExternalStorageDirectory() + "/PDMA/DMAPPOutputs/");
if (!AppPath.exists()) {
AppPath.mkdirs();
}
File outputFile = new File(AppPath.getAbsolutePath() + "/" + fileName + ".dmapp");
if (!outputFile.exists())
outputFile.createNewFile();
MediaScannerConnection.scanFile(context, new String[] {AppPath.toString(),outputFile.toString()}, null, null);
FileOutputStream fileOutputStream = new FileOutputStream(outputFile, true);
PrintWriter pw = new PrintWriter(fileOutputStream);
try{
pw.println(json);
pw.flush();
pw.close();
fileOutputStream.flush();
fileOutputStream.close();
}catch (Exception e){
e.printStackTrace();
}finally{
pw.flush();
pw.close();
fileOutputStream.flush();
fileOutputStream.close();
MediaScannerConnection.scanFile(context, new String[] {AppPath.toString(),outputFile.toString()}, null, null);
}
}
problem is that when I try to copy this file by connecting mobile to pc in mtp, its not copied fully. If I right click to see its size, its less than actual. Now If in android, I copy and paste this file somewhere else, say in downloads folder, size is correct and file is also complete.
What can be the problem.
UPDATE:
If I use fileOutputStream to write bytes one by one , then file is generated but I have to close application to access this file from pc.
Well it turns out that by adding this.cancel(true) at the end of onPostExecute() solved problem in my case.
i try to write text in file.i wrote code ,witch can to write text ,but if i will use again my code again text is rewrite in file.for example if i first time write "Hello android" and then "Sir",result is only "Sir".i want "Hello android Sir"
your_file = new File("/sdcard/facebookUser");
try {
Writer writer = new OutputStreamWriter(new FileOutputStream(
your_file), "UTF-8");
writer.write(facebook_user_name + ",");
writer.write(facebook_id);
writer.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
how i can write code to save another text in this file second time?
new FileOutputStream(your_file, true)
public FileOutputStream(String name, boolean append) throws FileNotFoundException
append - if true, then bytes will be written to the end of the file rather than the beginning
Instead of:
writer = new OutputStreamWriter(new FileOutputStream(
your_file), "UTF-8");
Use:
writer = new OutputStreamWriter(new FileOutputStream(
your_file, true), "UTF-8");
This sets the FileOutputStream in append mode.
java.io.FileOutputStream.FileOutputStream(File file, boolean append)
throws FileNotFoundException
Constructs a new FileOutputStream that writes to file. If append is
true and the file already exists, it will be appended to; otherwise it
will be truncated. The file will be created if it does not exist.
try {
int n = 0;
String Name = "file";
File myFile = new File("/sdcard/test/");
if (!myFile.exists()) {
boolean b = myFile.mkdirs(); }
myFile = new File("/sdcard/test/"+Name+".txt");
while (myFile.exists())
{
myFile = new File("/sdcard/test/"+Name+n+".txt");
n++;
}
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
String str = "Your text to write";
myOutWriter.append(str);
myOutWriter.close();
fOut.close();
} catch (Exception e) {}
And do not forget permision:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Vladimir Kulyk and user2450263 are correct! You have to write a file in append mode. try this link.
I am using this code as a part to write data to a text file, but I am not sure how I can append the data to the new line. "\n" does not seem to be working. Here, variable "data" has this format:
t=1, x=-3.1, y=19.0, z=-8.6
this part of the code iterates and the variable "data" is written each time; the current result is something like:
t=1, x=-6.9, y=-9.6, z=-6.9t=2, x=-1.4, y=6.2, z=7.0t=3, x=-1.4, y=6.1, z=6.9t=4, and so on, but what I would like is:
t=1, x=-6.9, y=-9.6, z=-6.9
t=2, x=-1.4, y=6.2, z=7.0
t=3, x=-1.4, y=6.1, z=6.9
Thanks in advance for your help.
String datatest = data.toString();
File sdCard = Environment.getExternalStorageDirectory();
File directory = new File (sdCard.getAbsolutePath() + "/test");
directory.mkdirs();
String filename = "test.txt";
File file = new File(directory, filename);
FileOutputStream fOut = null;
try {
fOut = new FileOutputStream(file, true);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
OutputStreamWriter osw = new OutputStreamWriter(fOut);
try {
osw.write(datatest + "\n");
osw.flush();
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
try "\r\n"
and to make this answer longer :)
I am working on a method that writes an XML file to the device. I've allowed external storage in the manifest file, but I can't find the file at the location it should be.
Here is my code:
public static void write (){
Serializer serial = new Persister();
File sdcardFile = new File("/Prueba/file.xml");
Item respuestas = new Item();
try {
serial.write(respuestas, sdcardFile);
} catch (Exception e) {
// There is the possibility of error for a number of reasons. Handle this appropriately in your code
e.printStackTrace();
}
Log.i(TAG, "XML Written to File: " + sdcardFile.getAbsolutePath());
}
}
Sdcard File path problem. Here is an exaple that write string in file.xml file.
File myFile = new File("/sdcard/file.xml");
try {
File myFile = new File("/sdcard/file.xml");
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter =
new OutputStreamWriter(fOut);
myOutWriter.append("encodedString");
myOutWriter.close();
fOut.close();
} catch (Exception e) {
}
You able to get External Storage name by this way,
String root = Environment.getExternalStorageDirectory().toString();
I am trying to get a simple Hello World txt file to be written then read by my android application. When viewing the DDMS File Explorer it successfully creates the text file but i then get a FileNotFoundException when trying to read it.
try {
final String TESTSTRING = new String("Hello World");
FileOutputStream fOut = openFileOutput("test.txt", MODE_WORLD_READABLE);
OutputStreamWriter osw = new OutputStreamWriter(fOut);
osw.write(TESTSTRING);
osw.flush();
osw.close();
FileInputStream fIn = new FileInputStream("test.txt");
InputStreamReader isr = new InputStreamReader(fIn);
char[] inputBuffer = new char[TESTSTRING.length()];
isr.read(inputBuffer);
String readString = new String(inputBuffer);
boolean isTheSame = TESTSTRING.equals(readString);
Log.i("File Reading Stuff", "success = " + isTheSame);
} catch (IOException e) {
e.printStackTrace();
}
also the error is java.io FileNotFoundException: /test.txt (No such file or directory)
Any Help Thanks.
I don't know where openFileOutput saves its files, but wouldn't you use it's input equivalent openFileInput to read such a file?
See my previous post with information about how to read/write to the external storage directory in Android:
Android how to use Environment.getExternalStorageDirectory()
-- Dan