1. 程式人生 > >iOS 實現錄音並儲存在指定檔案目錄下面

iOS 實現錄音並儲存在指定檔案目錄下面

原理:
進入介面,先遍歷檔案目錄,將所有的檔名,顯示在uitableview中。在錄音時需要設定session以及錄音取樣率。

1.ios錄音主要使用ios自帶的類,是工程中需要手動新增這倆個framework

#import <AVFoundation/AVFoundation.h>
#import <CoreAudio/CoreAudioTypes.h>

2.在錄音前,先監測檔案存放目錄是否存在,不存在就建立目錄

NSDate *  date=[NSDate date];
    NSDateFormatter  *dateformatter=[[NSDateFormatter alloc] init];
    [dateformatter setDateFormat:@"YYYY-MM-dd"
]; NSString *datefloder= [dateformatter stringFromDate:date]; dateaudioPath=[NSString stringWithFormat:@"%@/",datefloder]; fileMgr = [NSFileManager defaultManager]; //指向檔案目錄 NSString *documentsDirectory= [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; audioRecoderSavePath=[NSString
stringWithFormat:@"%@/%@%@", documentsDirectory,audioPath,dateaudioPath]; if (![fileMgr fileExistsAtPath:audioRecoderSavePath]) { [fileMgr createDirectoryAtPath:audioRecoderSavePath withIntermediateDirectories:YES attributes:nil error:nil]; }

3.點選錄音,開始錄音

          if(!isRecording)
            {
                isRecording = YES
; stateLabel.text[email protected]"錄音中"; [startRecoderBtn setTitle:@"停止錄音" forState:(UIControlStateNormal)]; // [email protected]"停止錄音"; NSDate * date=[NSDate date]; NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init]; [dateformatter setDateFormat:@"YYYYMMddHHYYSS"]; recoderName= [NSString stringWithFormat:@"%@%@",[dateformatter stringFromDate:date],@".caf"]; //tempRecoderPath=[NSHomeDirectory() stringByAppendingString:[NSString stringWithFormat:@"%@%@",audioPath,recoderName]]; tempRecoderPath=[NSString stringWithFormat:@"%@%@",audioRecoderSavePath,recoderName]; tempRecordedFile = [NSURL fileURLWithPath:tempRecoderPath]; recorder = [[AVAudioRecorder alloc] initWithURL:tempRecordedFile settings:[self getAudioSetting] error:nil]; recorder.delegate=self; [recorder prepareToRecord]; [recorder record]; avplayer = nil; } //If the app is recording, we want to stop recording, enable the play button, and make the record button say "REC" else { isRecording = NO; stateLabel.text=[NSString stringWithFormat:@"%@%@",@"錄音完成",recoderName]; //[email protected]"開始錄音"; [startRecoderBtn setTitle:@"開始錄音" forState:(UIControlStateNormal)]; [recorder stop]; recorder = nil; }

4.在列表展示檔案目錄中,遍歷所有的錄音檔案

-(NSMutableArray *)getFilenamelistOfType:(NSString *)type fromDirPath:(NSString *)dirPath
{
    NSMutableArray *filenamelist = [[NSMutableArray alloc]init];
    NSArray *tmplist = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:dirPath error:nil];

    for (NSString *filename in tmplist) {
        NSString *fullpath = [dirPath stringByAppendingPathComponent:filename];
        if ([self isFileExistAtPath:fullpath]) {
            if ([[filename pathExtension] isEqualToString:type]) {
                AudioObject *ob=[[AudioObject alloc]init];
                ob.audioRecoderName=filename;
                ob.audioRecoderPath=fullpath;
                ob.audioRecoderIsChecked=NO;
                [filenamelist addObject:ob];
            }
        }
    }

    return filenamelist;
}

-(BOOL)isFileExistAtPath:(NSString*)fileFullPath {
    BOOL isExist = NO;
    isExist = [[NSFileManager defaultManager] fileExistsAtPath:fileFullPath];
    return isExist;
}

完整程式碼
標頭檔案

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
#import <CoreAudio/CoreAudioTypes.h>
#import "Comm.h"
#import "AudioTableViewCell.h"
#import "AudioObject.h"
#import "AppDelegate.h"

@protocol AudioViewControllerDelegate <NSObject>

-(void)passAudioValueArray:(NSMutableArray *)array;


@end
@interface AudioViewController : UIViewController<AVAudioRecorderDelegate,AVAudioPlayerDelegate,UITableViewDelegate,UITableViewDataSource,AudioTableViewCellDelegate>
{
    NSURL *tempRecordedFile;
    AVAudioPlayer *avplayer;
    AVAudioRecorder *recorder;
    BOOL isRecording;    
    NSString * tempRecoderPath;


    NSMutableArray *audioRcoderMutableArray;

    NSString *audioRecoderSavePath;
    NSFileManager *fileMgr;
    NSString *recoderName;

    NSString *dateaudioPath;
    AppDelegate* audioDelegate ;

    NSMutableArray *passAudioMutableArray;
}
@property (strong, nonatomic) IBOutlet UIButton *startRecoderBtn;
@property (strong, nonatomic) IBOutlet UIButton *saveRecoderBtn;
@property (strong, nonatomic) IBOutlet UIButton *backBtn;
@property (strong, nonatomic) IBOutlet UILabel *stateLabel;
@property (strong, nonatomic) IBOutlet UIButton *cancelBtn;
@property (strong, nonatomic) IBOutlet UIButton *doneBtn;
@property (strong, nonatomic) IBOutlet UITableView *recoderTableView;
@property (nonatomic, strong)  id <AudioViewControllerDelegate>delegate;


@end

.m檔案


#import "AudioViewController.h"
#import "Comm.h"


@interface AudioViewController ()

@end

@implementation AudioViewController
@synthesize startRecoderBtn;
@synthesize saveRecoderBtn;
@synthesize backBtn;
@synthesize stateLabel;
@synthesize cancelBtn;
@synthesize doneBtn;
@synthesize recoderTableView;


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.



    recoderTableView.delegate=self;
    recoderTableView.dataSource=self;
    isRecording=NO;
    passAudioMutableArray=[[NSMutableArray alloc] init];
    NSDate *  date=[NSDate date];
    NSDateFormatter  *dateformatter=[[NSDateFormatter alloc] init];
    [dateformatter setDateFormat:@"YYYY-MM-dd"];
    NSString *datefloder= [dateformatter stringFromDate:date];
    dateaudioPath=[NSString stringWithFormat:@"%@/",datefloder];
    fileMgr = [NSFileManager defaultManager];
    //指向檔案目錄
    NSString *documentsDirectory= [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    audioRecoderSavePath=[NSString stringWithFormat:@"%@/%@%@", documentsDirectory,audioPath,dateaudioPath];

    if (![fileMgr fileExistsAtPath:audioRecoderSavePath]) {
        [fileMgr createDirectoryAtPath:audioRecoderSavePath withIntermediateDirectories:YES attributes:nil error:nil];
    }

    audioDelegate = [[UIApplication sharedApplication] delegate];
    audioRcoderMutableArray=[[NSMutableArray alloc]init];

    audioRcoderMutableArray = [self getFilenamelistOfType:@"caf" fromDirPath:audioRecoderSavePath];
    AVAudioSession *session = [AVAudioSession sharedInstance];
    NSError *sessionError;
    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];
    //[session setCategory:AVAudioSessionCategoryPlayback error:nil];
    if(session == nil)
        NSLog(@"Error creating session: %@", [sessionError description]);
    else
        [session setActive:YES error:nil];
}
-(void)viewDidUnload
{



}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (IBAction)btnControl:(UIButton *)sender {
    switch (sender.tag) {
        //返回
        case 0:
            [self.delegate passAudioValueArray:passAudioMutableArray];
            audioDelegate.audioSelectedMutableArray=audioRcoderMutableArray;
            [self dismissModalViewControllerAnimated:YES];
            break;
        //錄音
            case 1:

            if(!isRecording)
            {
                isRecording = YES;
                stateLabel.text[email protected]"錄音中";
                [startRecoderBtn setTitle:@"停止錄音" forState:(UIControlStateNormal)];
               // [email protected]"停止錄音";
                NSDate *  date=[NSDate date];
                NSDateFormatter  *dateformatter=[[NSDateFormatter alloc] init];
                [dateformatter setDateFormat:@"YYYYMMddHHYYSS"];
                recoderName= [NSString stringWithFormat:@"%@%@",[dateformatter stringFromDate:date],@".caf"];
                //tempRecoderPath=[NSHomeDirectory() stringByAppendingString:[NSString stringWithFormat:@"%@%@",audioPath,recoderName]];
                tempRecoderPath=[NSString stringWithFormat:@"%@%@",audioRecoderSavePath,recoderName];
                tempRecordedFile = [NSURL fileURLWithPath:tempRecoderPath];
                recorder = [[AVAudioRecorder alloc] initWithURL:tempRecordedFile settings:[self getAudioSetting] error:nil];
                recorder.delegate=self;
                [recorder prepareToRecord];
                [recorder record];
                avplayer = nil;
            }
            //If the app is recording, we want to stop recording, enable the play button, and make the record button say "REC"
            else
            {
                isRecording = NO;
                stateLabel.text=[NSString stringWithFormat:@"%@%@",@"錄音完成",recoderName];
                //[email protected]"開始錄音";
                 [startRecoderBtn setTitle:@"開始錄音" forState:(UIControlStateNormal)];
                [recorder stop];
                recorder = nil;

            }

            break;
        //保存錄音
            //講temp檔案下的錄音檔案移動到docment 目錄下面並且重新命名

        case 2:
            [self SaveAudioRecoder];
            break;
        //取消
        case 3:
            [self.delegate passAudioValueArray:passAudioMutableArray];
            audioDelegate.audioSelectedMutableArray=audioRcoderMutableArray;
            [self dismissModalViewControllerAnimated:YES];
            break;
        //確定
        case 4:
            [self.delegate passAudioValueArray:passAudioMutableArray];
            audioDelegate.audioSelectedMutableArray=audioRcoderMutableArray;
            [self dismissModalViewControllerAnimated:YES];
            break;
        default:
            break;
    }
}



#pragma mark - 私有方法


/**
 *  取得錄音檔案設定
 *
 *  @return 錄音設定
 */
-(NSMutableDictionary *)getAudioSetting{
    NSMutableDictionary *dicM=[NSMutableDictionary dictionary];
    //設定錄音格式
    [dicM setObject:@(kAudioFormatLinearPCM) forKey:AVFormatIDKey];
    //設定錄音取樣率,8000是電話取樣率,對於一般錄音已經夠了
    [dicM setObject:@(8000) forKey:AVSampleRateKey];
    //設定通道,這裡採用單聲道
    [dicM setObject:@(1) forKey:AVNumberOfChannelsKey];
    //每個取樣點位數,分為8、16、24、32
    [dicM setObject:@(8) forKey:AVLinearPCMBitDepthKey];
    //是否使用浮點數取樣
    [dicM setObject:@(YES) forKey:AVLinearPCMIsFloatKey];
    //....其他設定等
    return dicM;
}

//保存錄音
-(void)SaveAudioRecoder
{
    if (recorder!=nil) {

        UIAlertController * alertController = [UIAlertController alertControllerWithTitle:nil message:@"請先停止錄音" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
        }];
        [alertController addAction:cancelAction];
        [self presentViewController:alertController animated:YES completion:nil];

    }
    else
    {
        stateLabel.text[email protected]"開始錄音";
        AudioObject *object=[[AudioObject alloc]init];
        object.audioRecoderName=recoderName;
        object.audioRecoderPath=tempRecoderPath;
        object.audioRecoderIsChecked=NO;
        [audioRcoderMutableArray addObject:object];
        [recoderTableView reloadData];
        }
}
//播放音訊
-(void)PlayAudioRecoder :(NSString *) filePayh
{


        NSError *playerError;
        NSURL * playurl=[NSURL URLWithString:filePayh];
        avplayer = [[AVAudioPlayer alloc] initWithContentsOfURL:playurl error:&playerError];

        if (avplayer == nil)
        {
            NSLog(@"ERror creating player: %@", [playerError description]);
        }
        avplayer.delegate = self;
        [avplayer prepareToPlay];
        [avplayer play];






}

-(NSMutableArray *)getFilenamelistOfType:(NSString *)type fromDirPath:(NSString *)dirPath
{
    NSMutableArray *filenamelist = [[NSMutableArray alloc]init];
    NSArray *tmplist = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:dirPath error:nil];

    for (NSString *filename in tmplist) {
        NSString *fullpath = [dirPath stringByAppendingPathComponent:filename];
        if ([self isFileExistAtPath:fullpath]) {
            if ([[filename pathExtension] isEqualToString:type]) {
                AudioObject *ob=[[AudioObject alloc]init];
                ob.audioRecoderName=filename;
                ob.audioRecoderPath=fullpath;
                ob.audioRecoderIsChecked=NO;
                [filenamelist addObject:ob];
            }
        }
    }

    return filenamelist;
}

-(BOOL)isFileExistAtPath:(NSString*)fileFullPath {
    BOOL isExist = NO;
    isExist = [[NSFileManager defaultManager] fileExistsAtPath:fileFullPath];
    return isExist;
}



#pragma mark - 錄音機代理方法
/**
 *  錄音完成,錄音完成後播放錄音
 *
 *  @param recorder 錄音機物件
 *  @param flag     是否成功
 */
-(void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag{

    NSLog(@"錄音完成!");
}
-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    [avplayer stop];
    avplayer=nil;
    NSLog(@"播放完成!");
    UIAlertController * alertController = [UIAlertController alertControllerWithTitle:nil message:@"錄音播放完成" preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
        recorder=nil;
        avplayer=nil;
    }];
    [alertController addAction:cancelAction];
    [self presentViewController:alertController animated:YES completion:nil];

}
#pragma tableviewdelege

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    return audioRcoderMutableArray.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //指定cellIdentifier為自定義的cell
    static NSString *CellIdentifier = @"AudioTableViewCell";
    //自定義cell類
    AudioTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        //通過xib的名稱載入自定義的cell
        cell = [[[NSBundle mainBundle] loadNibNamed:@"AudioTableViewCell" owner:self options:nil] lastObject];
        cell.delegate=self;
    }
    cell.checkBtn.tag=indexPath.row;
    cell.playBtn.tag=indexPath.row;
    AudioObject *item=[audioRcoderMutableArray objectAtIndex:indexPath.row];
    cell.audioNameLabel.text=item.audioRecoderName;
    if (item.audioRecoderIsChecked) {
        [ cell.checkBtn setImage:[UIImage imageNamed:@"abc_btn_check_to_on_mtrl_015.png"] forState:UIControlStateNormal];
    }else
    {
        [ cell.checkBtn setImage:[UIImage imageNamed:@"abc_btn_check_to_on_mtrl_000.png"] forState:UIControlStateNormal];
    }

    return cell;
}
-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{

    return YES;
}
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleDelete;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    AudioObject *zz=[audioRcoderMutableArray objectAtIndex:indexPath.row];
    NSString * deletefile=zz.audioRecoderPath;

    BOOL bRet = [fileMgr fileExistsAtPath:deletefile];
    if (bRet) {
        //
        NSError *err;
        [fileMgr removeItemAtPath:deletefile error:&err];

    }
    [ audioRcoderMutableArray removeObjectAtIndex:indexPath.row];
    // Delete the row from the data source.
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];


}
//修改左滑刪除按鈕的title
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return @"刪除";
}

  int selectCount=0;
#pragma celldelegate
-(void)SelectAudioClicked:(UIButton *)button
{
    NSInteger s=button.tag;
    AudioObject *sm=[audioRcoderMutableArray objectAtIndex:s];

    if (sm.audioRecoderIsChecked) {
        sm.audioRecoderIsChecked=NO;
        if (selectCount==0) {
            return;
        }
        else
        {
            selectCount=selectCount-1;
            [passAudioMutableArray removeObject:sm];
            [ button setImage:[UIImage imageNamed:@"abc_btn_check_to_on_mtrl_000.png"] forState:UIControlStateNormal];
            NSString *btntile=[NSString stringWithFormat:@"完成(%d/5)",selectCount];
            [doneBtn setTitle:btntile forState:(UIControlStateNormal)];

        }

    }else
    {
    sm.audioRecoderIsChecked=YES;
        if (selectCount>5) {
            return;
        }
        else
        {
            selectCount=selectCount+1;
            [passAudioMutableArray addObject:sm];
            [ button setImage:[UIImage imageNamed:@"abc_btn_check_to_on_mtrl_015.png"] forState:UIControlStateNormal];
            NSString *btntile=[NSString stringWithFormat:@"完成(%d/5)",selectCount];
            [doneBtn setTitle:btntile forState:(UIControlStateNormal)];
        }

    }



}
-(void)PlayAudioClicked:(UIButton *)button
{
    NSInteger s=button.tag;
    AudioObject *j=[audioRcoderMutableArray objectAtIndex:s];
    NSString *pp=j.audioRecoderPath;
    [self PlayAudioRecoder:pp];

}
/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end

存在問題:
1.播放錄音是聽筒聲音。
2.未將錄音轉換為通用的音訊格式。

相關推薦

iOS 實現錄音儲存指定檔案目錄下面

原理: 進入介面,先遍歷檔案目錄,將所有的檔名,顯示在uitableview中。在錄音時需要設定session以及錄音取樣率。 1.ios錄音主要使用ios自帶的類,是工程中需要手動新增這倆個framework #import <AVFoundati

iOS uitableview自定義相簿(實現拍照儲存指定目錄以相簿的形式展示圖片)

原理: 圖片的展示是通過uitableview實現。照片的展示以及選擇(uitableviewce’l’l)是通過倆個uibutton的疊加完成。通過設定每個uibutton的tag,並在viewcontroller中實現cell的delegate來實現對ui

ios在真機中將NSLog日誌存入檔案儲存到document目錄

下面的方法都是在Appdelegate.m中 - (void)redirectNSLogToDocumentFolder{         NSString *fileName =[NSStringstringWithFormat:@"%@.log",[NSDat

[NSLog日誌]ios在真機中將NSLog日誌存入檔案儲存到document目錄

儲存Log日誌- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //當真機連線Mac

iOS開發 在真機中將NSLog日誌存入檔案儲存到document目錄

- (BOOL)application(UIApplication *)application didFinishLaunchingWithOptions(NSDictionary *)launchOptions { //制定真機除錯儲存日誌檔案 [self redirectNSLo

Qt開啟指定目錄選中指定檔案

目錄 方法一、使用Qt自帶的方法 方法二、使用windows自帶工具   有時自動生成檔案之後,點選某個按鈕我們希望能夠自動跳轉到檔案所在目錄(開啟之後不依附於執行程式),可能還需要選中該檔案。 環境:win10 + Qt5.9.6 MinG

[原始碼和文件分享]程式設計實現錄音儲存為WAV音訊檔案

背景 之前自己錄製視訊教程的時候,從網上找過一些破解版錄屏軟體來使用。後來,我細想了一下,其實我自己就可以下一個簡單的錄屏小軟體。於是,後來我也自己慢慢摸索著,從網上搜索資料,慢慢地開發了一個有基本的錄音錄屏功能的小程式。 其中,本文的錄音小程式是當時為了熟悉錄音流程而特意開發來練手的。當然

rsync 複製檔案排除指定檔案

rsync命令是一個遠端資料同步工具,可通過LAN/WAN快速同步多臺主機間的檔案。rsync使用所謂的“rsync演算法”來使本地和遠端兩個主機之間的檔案達到同步,這個演算法只傳送兩個檔案的不同部分,而不是每次都整份傳送,因此速度相當快。 rsync是一個功能非常強大的工具,其命令也有很多

使用者登入使用java的IO流實現將資料儲存到data目錄

一、效果展示 1、最初可以看到data/data目錄下該專案只有一個cache資料夾和lib檔案 第一次執行程式,使用者名稱和密碼皆為空。 當我們輸入使用者名稱和密碼後,點選登入專案目錄下出現名為info.txt的文件,開啟它可以看到原先輸入的使用者名稱和密碼。 第二次執行

mac 進入指定檔案目錄

用了兩年多的mac了,好多東西都還不會,平時也拿來做開發用,但是有種沒有windows順手的感覺。就拿使用maven這件事來說吧。用homebrew安裝了maven,但是想使用安裝的maven來管理專案的時候,卻找不到maven安裝在哪兒,好幾次都問度娘,每次都覺得麻煩,就沒弄成功過。前幾天又試

Go後臺對圖片base64解碼,儲存檔案伺服器。

單人開發移動端專案前後端,對專案中出現的一些問題做記錄。 前端使用vue,預設base64編碼上傳圖片,略過。 後臺使用go-gin框架,主要使用了路由和資料傳輸和繫結的功能 1. 後端宣告一個結構體用於接收前端資料和將資料儲存到資料庫(mangodb) 其中ImgList用於接收

javascript實現生成下載txt檔案

下面的簡單函式允許您直接在瀏覽器中生成檔案,而無需接觸任何伺服器。它適用於所有HTML5就緒的瀏覽器,因為它使用了<a>的下載屬性: function download(filename, text) { var element = document.c

Python 判斷建立多級檔案目錄

在使用Python寫入檔案檔案的過程中,需要判斷資料夾路徑是否存在,不存在需要建立多級路勁 import os #先定義一個帶路徑的檔案 filename = "/home/mydir/test

Android日誌列印類LogUtils,能夠定位到類名,方法名以及出現錯誤的行數儲存日誌檔案

  關注finddreams,一起分享,一起進步!http://blog.csdn.net/finddreams/article/details/4556

71.android 簡單的電話錄音儲存到本地(來電和去電都支援)

 //第一步 先加許可權 在AndroidManifest.xml裡: //有打電話的許可權,讀寫許可權,還有錄音許可權。  <uses-permission android:name="android.permission.CALL_PHONE" />

Unity iOS截圖儲存到手機相簿總結

unity截圖方法 using System.Runtime.InteropServices; using UnityEngine; using UnityEngine.UI; public class Screenshots : MonoBehaviour {

java 刪除指定檔案目錄

今天沒事 回頭看看IO流的問題呢,順便整理下刪除檔案的步驟。畢竟曾經也是讓我頭疼的問題。 本來想將刪除目錄以及子目錄都放在一個方法處理的(在一個方法中只能刪除子目錄,執行完這個方法才會執行刪除最外層目錄的程式碼),但是沒能處理的了,因為時間緊張也就沒往下想(其實這樣也挺好,簡單、易懂)。希望各位

Java編寫爬蟲,儲存本地檔案,未涉及圖片,視訊的儲存,只是儲存文字內容

Java Jsoup jar包編寫爬蟲 這個案例內容很簡單,只是設計文字的爬取,未涉及到圖片儲存與視訊儲存。記錄下來只是方便自己的一個記錄、同時希望給向我這樣第一次接觸爬蟲的朋友一個參考!! 個人覺得分為兩步走!當然,我寫了三個檔案,內容如下: 一、開始方法 S

【Java】下載網路上的圖片儲存到本地目錄

import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; impo

使用 ACL 設定使用者訪問指定檔案/目錄的許可權 | Linux 中國

ACL 表示訪問控制列表(Access Control List,ACL),它為檔案系統提供了附