一.Java创建文件,文件是否已经存在?
java 的如果文件夹路径不存在,先创建;如果文件名 的文件不存在,先创建再读写;存在的话直接追加写
if ( !myPath.exists()){//若此目录不存在,则创建之
myPath.mkdir();
System.out.println("创建文件夹路径为:"+ filePar);
}
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile;
public class AllTest {
public static void main(String args[])
{
StringBuffer fileBuf=new StringBuffer();
String filePar = "d:\\test";// 文件夹路径
File myPath = new File( filePar );
if ( !myPath.exists()){//若此目录不存在,则创建之
myPath.mkdir();
System.out.println("创建文件夹路径为:"+ filePar);
}
// 文件夹路径存在的情况下
String filename = "test.txt";// 文件名
try {
FileWriter fw = new FileWriter(filePar + "\\" + filename,true);// filePar + "\\" + filename,true
// FileWriter 就是牛,如果文件名 的文件不存在,先创建再读写;存在的话直接追加写,关键字true表示追加
String originalLine = "aaaaaaaaaa" + "\n";//
System.out.println("*** "+ originalLine);
fw.write(originalLine);
// 关闭写文件,每次仅仅写一行数据,因为一个读文件中仅仅一个唯一的od
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
二.bufferedwriter的flush()
问题:在控制台可以打印信息,但是写不进txt文本
原因:没有及时 flush() ,BufferedWriter是缓冲输入流,意思是调用BufferedWriter的write方法时候。数据是先写入到缓冲区里,并没有直接写入到目的文件里。必须调用BufferedWriter的flush()方法。这个方法会刷新一下该缓冲流,也就是会把数据写入到目的文件里。或者你可以调用BufferedWriter的close()方法,该方法会在关闭该输入流之前先刷新一下该缓冲流。也会把数据写入到目的文件里。
三.string与stringbuffer互相转换
StringBuffer转为String:
1. StringBuffer类自动重写publicString toString(),返回的是string类型;
例:String str2 = buffer3.toString();
2. 通过string类的构造方法:publicString(StringBuffer buffer)
例:StringBuffer buffer3 = newStringBuffer();
String s= new String(buffer3);
String转为StringBuffer:
1. 构造方法。publicStringBuffer(String str)
例:StringBuffersb1 = newStringBuffer("abc");
2. append方法。public StringBuffer append(String str)
例:StringBuffer buffer3 = newStringBuffer();
String str = new “java”;
buffer3.append(str);
四.String类型变量的赋值
2.1 String变量赋值方式:s2=new String(s1)
下面这段代码的运行结果是什么
package com.soft;
public class ExecutorsDemo {
public static void main(String[] args) {
String s1="abc"+"def";
String s2=new String(s1);
if(s1.equals(s2))
System.out.println("equals succeeded");
if(s1==s2)
System.out.println("==succeeded");
}
}
结果:equals succeeded
解说:上述代码中,s1与s2指向不同的对象,但是两个对象的内容却是一样的,故“s1==s2”为假,s1.equals(s2)为真。
此处我们来细说一下”==”与equals的作用:
(1)”==”操作符的作用
A、用于基本数据类型的比较
B、判断引用是否指向堆内存的同一块地址
(2)equals的作用
用于判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同,返回值为布尔类型
2.2 String变量赋值方式:s2 = s1
package com.soft;
public class ExecutorsDemo {
public static void main(String[] args) {
String s1 = new String("java");
String s2 = s1;
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
}
}
结果:
true
true
解说:如果理解了前面那个例子的运行情况,那么这个就是一目了然的事情,此处s1与s2指向同一个对象,”==”操作符的作用之一就是判断引用是否指向堆内存的同一块地址,equals的作用是判断两个变量是否是对同一个对象的引用(即堆中的内容是否相同),故此处均输出“true”
参考:
https://www.cnblogs.com/jpfss/p/8868208.html
https://blog.csdn.net/u014221266/article/details/41721365