技术标签: java
相对路径:相对于项目的路径 绝对路径 路径全称
import java.io.File;
import java.lang.Object;
字段:跨平台的分隔符可能不同可以调用去查看
路径分隔符(;)File.pathSeparator()
名称分隔符(\)File.separator()
他们相当于类里面的常量
System.out.println(File.separator)
//Ctrl+鼠标左键pathSeparator
public static final String pathSeparator = "" + pathSeparatorChar;
//构造方法的参数即括号内都是用双引号
1.File(String pathname)
//通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
2.File(File parent, String child)文件
路径对象,文件名
//从父抽象路径名和子路径名字符串创建新的 File实例
3.File(String parent, String child)
路径名,文件名
//从父路径名字符串和子路径名字符串创建新的 File实例
对象名.createNewFile();
创建的是文本文件
当且仅当具有此名称的文件尚不存在时,以原子方式创建由此抽象路径名命名的新空文件
public boolean createNewFile() throws IOException
对象名.mkdir();
创建的是文件夹
mkdirs 创建此抽象路径名指定的目录,包括任何必需但不存在的父目录D://****/**/*把它最后个前面的文件夹都创出来,而mkdir就创建最后那个,前面的需要有,不然出错
public boolean mkdir()
返回此抽象路径名的绝对形式。诸如D://***/**/
亲测一致,就返回值不一样
public String getAbsolutePath()//返回此抽象路径名的绝对路径名字符串
public File getAbsoluteFile()//返回此抽象路径名的绝对形式
public String getName()//返回此抽象路径名表示的文件或目录的名称。
public String getPath()//将此抽象路径名转换为路径名字符串
返回此抽象路径名父项的路径名字符串,如果此路径名未指定父目录,则返回 null 。
返回此抽象路径名父项的抽象路径名,如果此路径名未指定父目录,则返回 null 。即获取父文件夹的对象
public String getParent()
public File getParentFile()
返回此抽象路径名表示的文件的长度。1024kb=1m
public long length()
public boolean exists()//测试此抽象路径名表示的文件或目录是否存在
public boolean isFile()//测试此抽象路径名表示的文件是否为普通文件
public boolean isDirectory()//测试此抽象路径名表示的文件是否为目录
public String[] list()//返回一个字符串数组,用于命名此抽象路径名表示的目录中的文件和目录
public File[] listFiles()//返回一个抽象路径名数组,表示此抽象路径名表示的目录中的文件。
重命名此抽象路径名表示的文件,相当于移动了 文件
此方法行为的许多方面本质上都依赖于平台:
重命名操作可能无法将文件从一个文件系统移动到另一个文件系统,它可能不是原子的,如果具有目标抽象路径名的文件,它可能不会成功已经存在。 应始终检查返回值以确保重命名操作成功
public boolean renameTo(File dest)
import java.io.File;
public class DemoFile {
//搞D盘,C可能异常
public static void main(String[] args) throws IOException {
//创建对象,参数:"D://+****",此时调用的是一参构造方法
File file = new File("D://1.txt");
//创建flag来表示是创建文件还是已存在
boolean flag = file.createNewFile();
System.out.println(flag?"创建成功":"创建失败");//三目运算符
//创建dir对象,在java中先命名在C盘为"dir创建的文件夹"
File dir = new File("D://dir创建的文件夹");
//dir.mkdir();//调用方法创建它你创建一次就注释掉
File a = new File(dir,"a.txt");//通过创建的那个文件对象
//a.createNewFile();
File b = new File("D://dir创建的文件夹","b.txt");//通过文件的路径,文本文件
//b.createNewFile();
a.delete();
b.delete();
file.delete();
dir.delete();
File f = new File("一个路径");
File newf = new File("你要改的那个路径");
file.renameTo(newf);
}
}
mkdir与createNewFile的调用区别
File dir = new File ("C://1.txt");
//dir.createNewFile();上面那个创建的是文本文件,名字是1,.后面是它的格式
dir.mkdir();
//这个就是生成一个文件夹,名字就是 1.txt
File遍历
import java.io.*;
public class DemoListFile {
public static void main(String[] args) {
File file = new File("E:\\");
File[] files = file.listFiles();
listFiles(files);
}
public static void listFiles(File[] files){
if(files != null && files.length>0){
for (File f:files) {
if(f.isFile()){
//是文件
if(f.getName().endsWith(".avi")){
//找到一个avi文件
//E:\Python\第02周-Python3.5-零基础-高级-项目实战最新教程-共14章节\第二周-第05章节-Python3.5-python数据类型.avi
//E:\Python\第02周-Python3.5-零基础-高级-项目实战最新教程-共14章节\第二周-第05章节-Python3.5-python数据类型.avi
System.out.println(f.getAbsolutePath());
}
}else{
File[] files2 = f.listFiles();
listFiles(files2);
}
}
}
}
}
文件的过滤器
FileFilter接口
下面的方法和实现类都必须是static…
public interface FileFilter {
boolean accept(File pathname);
}
import java.io.*;
public class DemoFilter {
public static void main(String[] args) {
File file = new File("c:\\");
filter(file);
}
public static void filter(File file){
//创建一个过滤器并创建规则
FileFilter filter = new AVIFileFilter();
//通过文件获取子文件夹,把上面的过滤器加载创建文件数组的时候
File[] files = file.listFiles(filter);
if(files!=null && files.length > 0)
for (File f:files) {
if(f.isDirectory()){
filter(f);
}else{
System.out.println("发现avi"+f.getAbsolutePath());
}
}
}
static class AVIFileFilter implements FileFilter{
@Override
public boolean accept(File pathname) {
//实现过滤器接口的方法(快捷键impements),过滤是否是avi
if(pathname.getName().endsWith(".avi")||pathname.isDirectory())
return true;
return false;
}
}
}
优化后
import java.io.*;
public class DemoFilter2 {
public static void main(String[] args) {
File file = new File("E:\\");
filter(file);
}
public static void filter(File file){
//把接口的实现用匿名内部类实现
//并把这个实现了的借口直接过滤在创建的文件夹数组如下行
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if(pathname.getName().endsWith(".avi")||pathname.isDirectory()){
return true;
}
return false;
}
});
if(files!=null && files.length > 0)
for(File f:files) {
if(f.isDirectory()){
filter(f);
}else{
System.out.println("发现avi"+f.getAbsolutePath());
}
}
}
}
IO概述:移动文件,数据传输操作,看做是一种数据流动,按照流动的方向分为输入Input输出Output
java中的IO操作主要指java.io包下的一些常用类的使用,通过这些类对数据进行读取(输入Input)和写出(输出Output)
IO流的分类:按照列的方向分为输入流和输出流
按流动的数据类型分为字节流和字符流
字节流 | 字符流 | |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
上面的都是最顶级的父类
一切皆字节:计算机任何数据都是以二进制形式存储的
java.lang.Object
java.io.OutputStream 抽象类
FileOutputStream(File file)
FileOutputStream(String name)
FileOutputStream(String name, boolean append)
FileOutputStream(File file, boolean append)
FileOutputStream实例代码
public static void main(String[] args) throws IOException {
//一个流重新创建时才是否追加,不追加再写入会清空原内容,流关闭之前都是写的一个内容
FileOutputStream fos = new FileOutputStream("E:\\a.txt",true);//加true就是写入追加
//fos.write(65);//字节写入出来就是A
//fos.close();//流关闭后在写入就出错
byte[] bytes = {
65,66,67,68};//{};内可换成“ABCD”.getByte();
fos.write(bytes);
//写一部分,一下标两个内容
fos.write(bytes,1,2);
fos.close();
}
java.io.InputStream 抽象类其父类
FileInputStream(File file)
FileInputStream(String name)
public int read() throws IOException
read读取一个
FileInputStream fis = new FileInputStream("E:\\a.txt");
//byte b = (byte)fis.read();//read返回值是int
while(true){
//read一次读取一个字节内容
byte b = (byte)fis.read();
//read读到末尾时时-1
if(b ==-1){
break;
}
System.out.println(b);
read读取一组(经场用)
一组一组的存在指定个数数组内,不够十个的对上个内存的前几个种植后面面得、
FileInputStream fis = new FileInputStream("E:\\a.txt");
byte[] bytes = new byte[10];
fis.read(bytes);
System.out.println(new String(bytes));
fis.read(bytes);
System.out.println(new String(bytes));
fis.read(bytes);
System.out.println(new String(bytes));
f.close();
加上指定长度就可以避免
FileInputStream fis = new FileInputStream("E:\\a.txt");
byte[] bytes = new byte[10];
int len = fis.read(bytes);
System.out.println(new String(bytes,0,len));
len = fis.read(bytes);
System.out.println(new String(bytes,0,len));
len = fis.read(bytes);
System.out.println(new String(bytes,0,len));
len = fis.read(bytes);
System.out.println(len);
f.close();
public static void main(String[] args) throws IOException {
System.out.println("请输入文件存储的绝对路径:");
Scanner input = new Scanner(System.in);
//字符串存输入的地址
String fileName = input.next();
//源文件a.png
File oldFile = new File(fileName);
//加密存储的新文件mi-a.png
File newFile = new File(oldFile.getParentFile(),"mi-"+oldFile.getName());
FileInputStream fis= new FileInputStream(oldFile);
FileOutputStream fos = new FileOutputStream(newFile);
while(true){
int b = fis.read();
if(b==-1){
break;
}
//^任何数据都是其本身
fos.write(b^10);
}
System.out.println("加密或解密完成");
}
字符编码
字节流读文字出现乱码,只有读文字用字符流
字符流是读取一个完整的文字为一个单位,不会出现读一半
字节流除了文字
构造方法
FileWriter(File file)
append的源代码,返回的是Writer(多态),所以append可以连续追加一直调用,调用完还是这个对象态
@Override
public Writer append(CharSequence csq) throws IOException {
if (csq instanceof CharBuffer) {
se.write((CharBuffer) csq);
} else {
se.write(String.valueOf(csq));
}
return this;
}
FileWriter实例
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("E:\\b.txt",true);
fw.write("爱");
// FileWriter fw2 = (FileWriter)fw.append("你");
fw.append("你").append("你").append("你");
fw.close();
//System.out.println(fw==fw2);
}
FileReader
跟FileInputStream类似
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("E:a.txt");
//int c= fr.read();
//System.out.println((char)c);
char[] chars = new char[100];//创建的数组都有默认值100很大后面变成空格打印出来
//fr.read(chars);
//System.out.println(((int)chars[0]);看看初试的值
//那么就指定出来长度,read返回的是int
int len = fr.read(chars);
System.out.println(new String(chars,0,len));
fr.close();
}
flush和close,close 相当于把刷新管道关闭,相当于刷新了
不刷新在内存中没有传到文件
public static void main(String[] args) throws IOException {
//转换流
//字节流装饰为字符流 :使用了装饰者设计模式
FileInputStream fis = new FileInputStream("E:\\a.txt");
//将字节输入流 转换为字符输入流
//参数1.要装换的字节流
//参数2.指定编码名称
InputStreamReader isr = new InputStreamReader(fis);
while (true) {
int c = isr.read();
if (c == -1) {
break;
}
System.out.println((char) c);
}
//字符装饰为字节
FileOutputStream fos = new FileOutputStream("E:\\a.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos);
osw.write("回避不");
osw.close();
}
public static void main(String[] args) throws IOException {
//字符输出 打印流
/*System.out.println();//源码out是PrintStream类
//自己创建个打印
PrintStream ps = new PrintStream("E:\\c.txt");
ps.println("床前明月光");//打印在文件,有点像Write*/
/*PrintWriter pw = new PrintWriter("E:\\c.txt");
pw.println("床前明月光");
pw.flush();//这个需要刷新管道缓存*/
//这两个打印流转换
FileOutputStream fos = new FileOutputStream("E:\\c.txt");
PrintWriter pw = new PrintWriter(fos);
pw.println("哈哈哈");
pw.flush();
//缓存读取流,将字符输入流 转换为带有缓存 可以一次读取一行的缓存字符读取流
FileReader fw = new FileReader("E:\\a.txt");
BufferedReader br = new BufferedReader(fw);
br.readLine();
}
public static void main(String[] args) throws FileNotFoundException {
try{
String s = null;
s.toString();
}catch(Exception e){
PrintWriter pw = new PrintWriter("c:\\bug.txt");
SimpleDateFormat sdf = new SimpleDateFormat("yyyyy-MM-dd HH:mm");
pw.println(sdf.format(new Date()));
e.printStackTrace(pw);
pw.close();
}
}
AddressSanitizer维基百科,自由的百科全书 https://en.wikipedia.org/wiki/AddressSanitizerGiuHubhttps://github.com/google/sanitizers/wiki/AddressSanitizer 最近遇到一个问题,在编译caffe的 c++ 程序时, 加上 -fsanitize=ad
提取码: yns7源码介绍:内附详细视频与文字安装教程。说明:升级更新增加:1x - 增加登录注册页面2x - 增加环迅IPS支付方式3x - 增加易宝支付升级操作:1.如果有二次开发,对比修改,没有二次开发直接根目录覆盖(Conf下的db.php文件不要覆盖)。2.pay_sjapi.sql 导入数据库(两个支付的配置文件)如果觉得麻烦可以直接 导入 pay-new.sql3.pay-new.s...
更新 本文会随着后续实践文章有相应的改动,请及时更新! 2010-12-21 HCNetSDK2010-12-21.rar 主要更新了SerialDataCallBack委托的pRecvDataBuffer参数数据类型,由string改为byte[],这里感谢badnewfish实践后指出,欢迎大家积极反馈! 2009-10-3...
简介LAMP源码编译搭建LAMP架构为什么要源码编译一般来说,我们软件的安装方式有Yum(rpm),和源码编译两种方式,那么为什么我们需要源码编译安装一部分软件?选择源码编译安装软件有以下几个原因:1. 满足不同的运行平台,我们Linux发行版本众多,但是每个版本采用的软件或者内核版本都不一样,而我们的二进制包所依赖的环境不一定能够正常运行,所以大部分软件直接提供源码!2. 方便定制,满足...
Scala中处理XML文件的功能是比较强大的,因此不管怎样至少也得接触一下。XML也是Scala中的“第一类公民”,直接将一个XML格式的字符串赋值给一个val值变量就可以开始处理了。最基本的有scala.xml.Elem类中的 \ 方法和 \\ 方法,它们可用于直接对XML文件进行解析和提取。 假如有如下的XML文件:symbols> symbol ticker="AAPL"
package binarytree; /** * 字典树的Java实现。实现了插入、查询以及深度优先遍历. * Trie tree's java implementation.(Insert,Search,DFS) * @author jiutianhe * @time 2012.10.16 */ public class TrieTree { final i
PAT (Basic Level) Practise (中文)- 1021. 个位数统计 (15) http://www.patest.cn/contests/pat-b-practise/1021给定一个k位整数N = dk-1*10k-1+ ... + d1*101+ d0(0<=di<=9, i=0,...,k-1, dk-1>0),请编写程序统计每...
./gcc-10.2.0/configure --enable-languages=c,c++,go --disable-multilib // 指定gcc10安装地址,指定所需安装语言,不支持32位。rsync rsync://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.gz ./ // 下载gcc10源码包。cd objdir/ // 新建一个编译目标文件暂存文件夹,官方文档不建议使用gcc源码包的文件夹。
Windows下无需借助其他工具,仅使用cmd命令即可计算出文件的哈希,支持MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512多种算法。
JXL操作Excel前言:jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可 供使用,一个是POI,一个是jExcelAPI。其中功能相对POI比较弱一点。但jExcelAPI对中文支持非常好,API是纯Java的, 并不 依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。 另外需要说明的是,这套API对图形和图表的支持...
博文转自:http://www.cnblogs.com/xuybin/archive/2013/10/22/3382072.html非对称加密算法非对称加密算法(asymmetric cryptographic algorithm)又名“公开密钥加密算法”,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是
第一次在VS中编译QT项目,因为在MinGW中不能编译带有qtwebengine的程序,因为这个引擎使用的google浏览器的内核,据QT官方的说法:google不喜欢MinGW,所以QT5.5以后的版本中带有这个模块的的部分将无法编译通过,我们只能通过VS来编译了。但是用VS打开项目却提示下面的错误。使用vs2015打开Qtcreator建的工程.pro文件报错,提示如下:— (Import):...