Unity3D学习笔记(二十五):文件操作
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
public class LessonFile : MonoBehaviour {
// Use this for initialization
void Start () {
//判断文件是否存在
if (File.Exists(@"D:\桌面\Directory\Text.txt"))
{
Debug.Log("文件存在");
}
//删除文件,注意文件的后缀
File.Delete(@"D:\桌面\Directory\Text.txt");
//移动文件,可以通过这种方式来对文件进行重命名,注意后缀名
//文件名可以不同,后缀名也可以不同(改变文件的类型)
File.Move(@"D:\桌面\Directory\JPG.jpg", @"D:\桌面\Directory\PNG.png");
//拷贝文件,前后名字可以不一致,后缀名也可以不一致
File.Copy(@"D:\桌面\Directory\PNG.png", @"D:\桌面\Directory\GIF.gif");
//创建文件
FileStream fsCreate = File.Create(@"D:\桌面\Directory\Create.txt");
fsCreate.Close();//关闭文件流
} // Update is called once per frame
void Update () { }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
public class LessonDirectory : MonoBehaviour {
// Use this for initialization
void Start () {
//获取当前应用程序(工程)的绝对路径
Directory.GetCurrentDirectory();
Debug.Log(Directory.GetCurrentDirectory());
//@取消转义
string str = @"\";
Debug.Log(str);
//判断指定的文件夹路径是否存在
if (Directory.Exists(@"D:\桌面\Directory"))
{
Debug.Log("Directory文件夹存在");
}
//创建文件夹
Directory.CreateDirectory(@"D:\桌面\Directory\File1");
Directory.CreateDirectory(@"D:\桌面\Directory\File2");
//删除文件夹,对于文件夹里有文件的情况,如果使用一个参数去删除会报错
//对于文件夹里有文件的情况,我们使用重载的第二个参数传入true表示强制删除
Directory.Delete(@"D:\桌面\Directory\File1");
//移动文件夹,可以通过这种方式来实现文件夹的重命名
Directory.Move(@"D:\桌面\Directory\File2", @"D:\桌面\Directory\File3");
//获取文件夹下的所有文件
string[] files = Directory.GetFiles(@"D:\桌面\Directory");
foreach (var item in files)
{
Debug.Log(item);
}
//获取指定路径下的所有文件夹
string[] directorys = Directory.GetDirectories(@"D:\桌面");
foreach (var item in directorys)
{
Debug.Log(item);
}
} // Update is called once per frame
void Update () { }
}
![](https://img2018.cnblogs.com/blog/1517599/201902/1517599-20190211231118023-845153908.png)
![](https://img2018.cnblogs.com/blog/1517599/201902/1517599-20190211231129293-973246396.png)
打开一个文件流之后,一定要关闭,否则会占用
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
public class LessonFile : MonoBehaviour {
// Use this for initialization
void Start () {
//判断文件是否存在
if (File.Exists(@"D:\桌面\Directory\Text.txt"))
{
Debug.Log("文件存在");
}
//删除文件,注意文件的后缀
File.Delete(@"D:\桌面\Directory\Text.txt");
//移动文件,可以通过这种方式来对文件进行重命名,注意后缀名
//文件名可以不同,后缀名也可以不同(改变文件的类型)
File.Move(@"D:\桌面\Directory\JPG.jpg", @"D:\桌面\Directory\PNG.png");
//拷贝文件,前后名字可以不一致,后缀名也可以不一致
File.Copy(@"D:\桌面\Directory\PNG.png", @"D:\桌面\Directory\GIF.gif");
//创建文件
FileStream fsCreate = File.Create(@"D:\桌面\Directory\Create.txt");
fsCreate.Close();//关闭文件流
} // Update is called once per frame
void Update () { }
}
![](https://img2018.cnblogs.com/blog/1517599/201902/1517599-20190211231154850-243343632.png)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LessonTryCatch : MonoBehaviour {
public GameObject obj;
// Use this for initialization
void Start () {
Debug.Log("开始try");
try
{
Debug.Log("try 语句块!");
Debug.Log(obj.name);//这句话一定会报错,跳转catch
Debug.Log("打印名字");
}
catch (System.Exception e)
{
Debug.Log("catch 语句块!" + e);
Debug.Log("错误信息:" + e);
Debug.Log(obj.name);//如果catch报错,之后的代码都不会执行
}
Debug.Log("结束try");
} // Update is called once per frame
void Update () { }
}
作业:读取文本内容,显示在UI的text组件上,并实现内容滚动
文本位置调整
文本自动扩容
读取文件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Text;
using UnityEngine.UI;
public class LessonHomework : MonoBehaviour {
public const string filePath = @"D:\桌面\1.txt";
private Text text;
private void Awake()
{
text = transform.Find("Mask/Text").GetComponent<Text>();
}
// Use this for initialization
void Start () {
FileStream fs = File.Open(filePath, FileMode.Open);
try
{
byte[] bytes = new byte[fs.Length];
int ret = fs.Read(bytes, , (int)fs.Length);
string str = Encoding.UTF8.GetString(bytes);
text.text = str;
}
catch (System.Exception e)
{
Debug.Log(e.ToString());
}
fs.Close();
} // Update is called once per frame
void Update () { }
}
写入文件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Text;
public class LessonWriteFile : MonoBehaviour {
public const string filePath = @"D:\桌面\Directory\ReadFile.txt";
// Use this for initialization
void Start () {
//string filePath1 = Directory.GetCurrentDirectory();
//filePath1 = filePath1 + "\\Directory\\";
//写入文本文件
//1、打开文件
FileStream fs = File.Open(filePath, FileMode.Open);
// FileStream fs = File.Open(filePath, FileMode.Append);//追加模式
Debug.Log("游标的位置:" + fs.Position);
//第一个参数:向前移或向后移多少位,第二个参数:从什么位置开始移动
//对于想要把游标移动到文件的末尾
//方法1
fs.Seek(fs.Length, SeekOrigin.Begin);
//方法2
fs.Seek(fs.Length - fs.Position, SeekOrigin.Current);
//方法3
fs.Seek(, SeekOrigin.End);
//对于想要把游标移动到文件的开始
//方法1
fs.Seek(, SeekOrigin.Begin);
//方法2
fs.Seek(-fs.Position, SeekOrigin.Current);
//方法3
fs.Seek(-fs.Length, SeekOrigin.End);
Debug.Log("游标的位置:" + fs.Position);
//为了保证文件打开之后一定能关闭,文件操作写在Try Catch里
try
{
//2、把要写入的内容转成字节数组
string str = "做一只快乐的小鱼苗~";
byte[] bytes = Encoding.UTF8.GetBytes(str);
//3、写入文件
//第一个参数:写入文件的内容转换成的字符串
//第二个参数:从字节数组中的第几位开始写入
//第三个参数:从字节数组中写入多少位
fs.Write(bytes, , bytes.Length);
}
catch (System.Exception e)
{
Debug.Log(e.ToString());
}
//最终关闭文件流
fs.Close();
} // Update is called once per frame
void Update () { }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
public class LessonStreamReader : MonoBehaviour {
public const string filePath = @"D:\桌面\Directory\ReadFile.txt";
// Use this for initialization
void Start () {
//文本读写器
//打开文件,保证路径是正确的,有效的
StreamReader sr = new StreamReader(filePath, System.Text.Encoding.UTF8);
try
{
//string str = sr.ReadLine();//只读取一行。
string str = sr.ReadToEnd();//从开始读到结尾
Debug.Log("读取的内容: " + str);
}
catch (System.Exception e)
{
Debug.Log(e.ToString());
}
//最后一定要关闭文件
sr.Close();
}
// Update is called once per frame
void Update () { }
}
文本写,不能操作游标,如果不使用追加模式,默认清空原有内容,重新写入
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
public class LessonStreamWrite : MonoBehaviour {
public const string filePath = @"D:\桌面\Directory\ReadFile.txt";
// Use this for initialization
void Start () {
//文本读写器
//1、打开文件
//这个重载,会把文件内容全部清除,重新写入内容
//StreamWriter sw = new StreamWriter(filePath);
//这个重载,是追加模式,第二个参数指定是否追加,第三个参数是指定编码格式
StreamWriter sw = new StreamWriter(filePath, true, System.Text.Encoding.UTF8);
try
{
sw.Write("Hello World!");
}
catch (System.Exception e)
{
Debug.Log(e.ToString());
}
//最后一定关闭文件
sw.Close();
} // Update is called once per frame
void Update () { }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Threading;
public class LessonCopyFile : MonoBehaviour {
public UnityEngine.UI.Slider slider;
public const string sourceFilePath = @"D:\桌面\1.rar";
public const string targetFilePath = @"D:\桌面\2.rar";
private float maxValue = 1f;
private float currentValue;
private bool isStop = false;
// Use this for initialization
void Start () {
//小文件的拷贝
//CopyFile(sourceFilePath, targetFilePath);
//大文件的拷贝
//TestCopyFile();
//大文件的线程拷贝
//1.申请一个Thread的对象
Thread th = new Thread(TestCopyFile);
//2.启动这个线程
th.Start();
}
// Update is called once per frame
void Update () {
//滑动条赋值
slider.normalizedValue = currentValue / maxValue;
}
private void OnDestroy()
{
isStop = true;
}
//小文件的拷贝
void CopyFile(string sourceFile, string targetFile)
{
//拷贝,就把源文件的内容写入到新的文件中
//1.读取源文件的内容
FileStream source = File.Open(sourceFile, FileMode.Open);
byte[] bytes = new byte[source.Length];
try
{
//读取内容
source.Read(bytes, , bytes.Length);
}
catch (System.Exception e)
{
Debug.Log(e.ToString());
}
source.Close();
//2.写入新文件
FileStream target = File.Open(targetFile, FileMode.Create);
try
{
//写入新文件
target.Write(bytes, , bytes.Length);
}
catch (System.Exception e)
{
Debug.Log(e.ToString());
}
target.Close();
}
void TestCopyFile()
{
Debug.Log("开始拷贝");
CopyBigFile(sourceFilePath, targetFilePath);
Debug.Log("拷贝结束");
}
void CopyBigFile(string sourceFile, string targetFile)
{
FileStream source = new FileStream(sourceFile, FileMode.Open);
FileStream target = new FileStream(targetFile, FileMode.Create);
byte[] bytes = new byte[];//限制每次拷贝100 * 1024个字节大小的内容
maxValue = source.Length;
try
{
long readCount = ;
//必须保证所有的内容都写入到另一个文件中了, 跳出循环
//只要保证每次读取的长度的累加值 大于等于 文件流的大小
while (readCount < source.Length)
{
int length = source.Read(bytes, , bytes.Length);
target.Write(bytes, , length);
readCount += length;
currentValue = readCount;
//当组件销毁时,停止多线程里的while循环,防止程序停止运行时,多线程仍在执行
if (isStop)
{
break;
}
}
}
catch (System.Exception e)
{
Debug.Log(e.ToString());
}
source.Close();
target.Close();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEngine.UI;
public class LessonLoadTexture : MonoBehaviour {
public RawImage image;
// Use this for initialization
void Start () {
image.texture = LoadFileTexture(@"D:\桌面\1.jpg");
image.SetNativeSize();
//加载网上的
//StartCoroutine(LoadTexture(@"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1527592090920&di=60ad08a7d15d3f91e7a370a9479b5d50&imgtype=0&src=http%3A%2F%2Fimage.yy.com%2Fyywebalbumbs2bucket%2Ffa63ba48c11f46278f9f2be98a141138_1499771837216.jpeg"));
//加载本地的 如果要www加载本地的图片,那么在路径前要加 file://
//StartCoroutine(LoadTexture(@"file://D:\桌面\1.jpg"));
}
// Update is called once per frame
void Update () { }
Texture LoadFileTexture(string filePath)
{
//把图片转换成字节数组
FileStream fs = File.Open(filePath, FileMode.Open);
byte[] bytes = new byte[fs.Length];
try
{
fs.Read(bytes, , bytes.Length);
}
catch (System.Exception e)
{
Debug.Log(e.ToString());
}
fs.Close();
//把字节数组转换成图片
Texture2D tex = new Texture2D(, );
if (tex.LoadImage(bytes))//把从字节数组中加载图片
{
return tex;
}
else
{
return null;
}
}
IEnumerator LoadTexture(string path)
{
WWW www = new WWW(path);
yield return www;//图片加载完成后,在执行后面的步骤
//string.IsNullOrEmpty(error) 判断error不能为null 也不能为“”
if (www != null && string.IsNullOrEmpty(www.error))
{
image.texture = www.texture;
image.SetNativeSize();
}
else
{
Debug.LogError("加载错误");
}
}
}
Unity3D学习笔记(二十五):文件操作的更多相关文章
- python3.4学习笔记(二十五) Python 调用mysql redis实例代码
python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...
- Java基础学习笔记二十五 MySQL
MySQL 在dos中操作mysql 连接mysql命令: mysql -uroot -p密码 ,连接OK,会出现mysql> 对数据库的操作 创建一个库 create database 库名 ...
- Java学习笔记二十五:Java面向对象的三大特性之多态
Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...
- PHP学习笔记二十五【类的继承】
<?php //定义父类 class Stu{ public $name; protected $age; protected $grade; private $address;//私有变量不会 ...
- Unity3D学习笔记(十五):寻路系统
动画生硬切换:animation.play();//极少使用,常用融合方法 动画融合淡入:animation.CrossFade(“Idle”, 0.2f);//0.2f为与前一动画的融合百分比为20 ...
- angular学习笔记(二十五)-$http(3)-转换请求和响应格式
本篇主要讲解$http(config)的config中的tranformRequest项和transformResponse项 1. transformRequest: $http({ transfo ...
- python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法
python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...
- 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧
目录 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧 25.1 Shell中的色彩处理 25.2 awk基本应用 25.2.1 概念 25.2.2实例演示 25.3 awk ...
- python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码
python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...
- Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...
随机推荐
- Word Add-in 函数调用顺序
这个图表明的函数的调用顺序,主要代码如下: // MyAddin.cpp : Implementation of DLL Exports. // Note: Proxy/Stub Informatio ...
- CentOS.56安装Redis监控工具RedisLive
RedisLive是一款开源的基于WEB的reids的监控工具,以WEB的形式展现出redis中的key的情况,实例数据等信息! RedisLive在github上的地址:https://github ...
- Java-使用IO流对大文件进行分割和分割后的合并
有的时候我们想要操作的文件很大,比如:我们想要上传一个大文件,但是收到上传文件大小的限制,无法上传,这是我们可以将一个大的文件分割成若干个小文件进行操作,然后再把小文件还原成源文件.分割后的每个小文件 ...
- C# 定时器 一个简单 并且可以直接运行的Demo
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- workerman定时任务使用
定时任务在有些场合很实用,像淘宝的自动确认收货就必须放在服务端进行,这时workeran的定时任务就派上用场了,它可以支持毫秒,crontab的粒度是一分钟 需要注意的是因为定时任务一直在执行,业 ...
- WSDL解析
背景 前面我们介绍过利用javassist动态生成webservice,这种方式可以使得我们系统通过页面配置动态发布webservice服务,做到0代码开发发布北向接口.进一步思考,我们如何0代码开发 ...
- python-自定义异常,with用法
抛出异常 #coding=utf-8 def exceptionTest(num): if num<0: print "if num<0" raise Excepti ...
- C/C++之学习笔记
[C语言的Static inline 函数的作用] [printf打印格式] %x 打印十六进制 %d 打印十进制 %b 打印二进制 %c 打印字符 %s 打印字符串 %f 打印单精度flo ...
- 基于Spring Cloud的微服务落地
微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务.但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持. 在Java生态圈,目前使用较多的微服务 ...
- python no module named 'win32api'
在cmd下执行 pip install pypiwin32api 即可