當前位置:首頁 » 編程語言 » java文本分類

java文本分類

發布時間: 2023-01-01 11:50:07

㈠ 如何用java實現根據文件後綴名分類文件,並且將文件復制到不同的文件夾

處理的代碼邏輯如下:

	publicstaticvoidmain(Stringargs[]){
StringsaveToFileDir="F:\整理後的文件存放目錄";
Filefile=newFile("F:\所需整理的文件目錄");
processFileFenLei(saveToFileDir,file);
}

(StringsaveToFileDir,Filefile){
if(file.getName().startsWith(".")){
return;
}
System.out.println("當前處理位置===>"+file.getAbsolutePath());
if(file.isFile()){
processCopyFile(saveToFileDir,file);
}else{
File[]subFiles=file.listFiles();
for(FilesubFile:subFiles){
processFileFenLei(saveToFileDir,subFile);
}
}
}

(StringsaveToFileDir,Filefile){
StringextFileName=FileCreateUtil.getFileExtension(file);
StringwholeDir=saveToFileDir+"\"+extFileName;
FilefileDir=newFile(wholeDir);
if(!fileDir.exists()){
fileDir.mkdirs();
}
FilesaveToFile=newFile(wholeDir+"\"+file.getName());
FileCreateUtil.saveFileToFile(file,saveToFile);
}

以上代碼中所用到的文件操作工具類:

importjava.io.BufferedInputStream;
importjava.io.BufferedOutputStream;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.sql.Blob;
importjava.sql.SQLException;

/**
*@作者王建明
*@創建日期Feb4,2010
*@創建時間9:56:15AM
*@版本號V1.0
*/
publicclassFileCreateUtil{
_TYPE_IMAGE="image/jpeg";

/**
*@說明將二進制位元組流保存為文件
*@parambyteArry二進制流
*@paramfile要保存的文件
*@throwsSQLException
*@throwsIOException
*/
(byte[]byteArry,Filefile)
throwsSQLException,IOException{
BufferedOutputStreambos=newBufferedOutputStream(
newFileOutputStream(file));
bos.write(byteArry);
bos.close();
}

/**
*@說明將文件轉換為二進制位元組流
*@paramfile要轉換的文件
*@return
*@throwsSQLException
*@throwsIOException
*/
publicstaticbyte[]changeFile2Bytes(Filefile)throwsSQLException,
IOException{
longlen=file.length();
byte[]bytes=newbyte[(int)len];
FileInputStreaminputStream=newFileInputStream(file);
=newBufferedInputStream(
inputStream);
intr=bufferedInputStream.read(bytes);
if(r!=len){
thrownewIOException("Filereaderror");
}
inputStream.close();
bufferedInputStream.close();
returnbytes;
}

/**
*@說明將Blob類類型的文件轉換成二進制位元組流
*@parampic
*@return
*@throwsSQLException
*@throwsIOException
*/
publicstaticbyte[]changeBlob2Bytes(Blobpic)throwsSQLException,
IOException{
byte[]bytes=pic.getBytes(1,(int)pic.length());

returnbytes;
}

/**
*@說明將Blob類類型的數據保存為本地文件
*@paramblob
*@paramfile
*@throwsSQLException
*@throwsIOException
*/
publicstaticvoidsaveBlob2File(Blobblob,Filefile)throwsSQLException,
IOException{
InputStreamis=blob.getBinaryStream();
BufferedOutputStreambos=newBufferedOutputStream(
newFileOutputStream(file));
intb=-1;
while((b=is.read())!=-1){
bos.write(b);
}
bos.close();
is.close();
}

/**
*@說明將一個文件拷貝到另一個文件中
*@paramoldFile源文件
*@paramnewFile目標文件
*/
(FileoldFile,FilenewFile){
FileInputStreamfis=null;
FileOutputStreamfos=null;
try{
fis=newFileInputStream(oldFile);//建立文件輸入流

fos=newFileOutputStream(newFile);

intr;
while((r=fis.read())!=-1){
fos.write((byte)r);
}
}catch(FileNotFoundExceptionex){
System.out.println("SourceFilenotfound");
}catch(IOExceptionex){
System.out.println(ex.getMessage());
}finally{
try{
if(fis!=null)
fis.close();
if(fos!=null)
fos.close();
}catch(IOExceptionex){
System.out.println(ex);
}
}
}

/**
*@說明獲取文本形式文件的內容
*@paramfile要讀取的文件
*@return
*/
(Filefile){
BufferedReaderbr=null;
try{
br=newBufferedReader(newFileReader(file));
Stringline=null;
StringBuildersb=newStringBuilder((int)file.length());
while((line=br.readLine())!=null){
sb.append(line);
sb.append(" ");
}
returnsb.toString();
}catch(FileNotFoundExceptione){
e.printStackTrace();
System.out.println("Filenotfound");
}catch(IOExceptione){
e.printStackTrace();
System.out.println("Readfileerror");
}finally{
try{
if(br!=null)
br.close();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
return"";
}

/**
*@說明把一個文件轉化為位元組
*@paramfile
*@returnbyte[]
*@throwsException
*/
publicstaticbyte[]getByteFromFile(Filefile)throwsException{
byte[]bytes=null;
if(file!=null){
InputStreamis=newFileInputStream(file);
intlength=(int)file.length();
if(length>Integer.MAX_VALUE)//當文件的長度超過了int的最大值
{
System.out.println("thisfileismax");
returnnull;
}
bytes=newbyte[length];
intoffset=0;
intnumRead=0;
while(offset<bytes.length
&&(numRead=is.read(bytes,offset,bytes.length-offset))>=0){
offset+=numRead;
}
//如果得到的位元組長度和file實際的長度不一致就可能出錯了
if(offset<bytes.length){
System.out.println("filelengthiserror");
returnnull;
}
is.close();
}
returnbytes;
}

/**
*@說明將指定文本內容寫入到指定文件中(原文件將被覆蓋!)
*@paramcontent要寫入的內容
*@paramfile寫到的文件
*/
(Stringcontent,Filefile){
try{
if(file.exists()){
file.delete();
}
file.createNewFile();

FileWriterfw=newFileWriter(file,true);
BufferedWriterbw=newBufferedWriter(fw);
bw.write(content);
bw.close();
fw.close();
}catch(IOExceptione){
System.out.println("Writefileerror");
e.printStackTrace();
}
}

/**
*@paramfile
*@paramencode
*@return
*@throwsException
*T:2012-03-0111:12:51A:王建明X:問題ID——R:備注——讀取文件時設置txt文件的編碼方式
*/
(Filefile,Stringencode)
throwsException{
StringBuildersb=newStringBuilder();
if(file.isFile()&&file.exists()){
InputStreamReaderinsReader=newInputStreamReader(
newFileInputStream(file),encode);

BufferedReaderbufReader=newBufferedReader(insReader);

Stringline=newString();
while((line=bufReader.readLine())!=null){
//System.out.println(line);
sb.append(line+" ");
}
bufReader.close();
insReader.close();
}
returnsb.toString();
}

/**
*@paramfile
*@returnT:2012-03-0111:12:25A:王建明X:問題ID——R:備注——獲取txt文件的編碼格式
*/
(Filefile){
Stringcode="";
try{
InputStreaminputStream=newFileInputStream(file);
byte[]head=newbyte[3];
inputStream.read(head);

code="gb2312";
if(head[0]==-1&&head[1]==-2)
code="UTF-16";
if(head[0]==-2&&head[1]==-1)
code="Unicode";
if((head[0]==-17&&head[1]==-69&&head[2]==-65))
code="UTF-8";
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
returncode;
}

/**
*@說明獲取文件後綴名
*@paramfile
*@return
*/
(Filefile){
if(file!=null&&file.isFile()){
Stringfilename=file.getName();
inti=filename.lastIndexOf(".");
if(i>0&&i<filename.length()-1){
returnfilename.substring(i+1).toLowerCase();
}
}
return"";
}

/**
*@說明刪除文件或文件夾
*@paramfile
*@作者王建明
*@創建日期2012-5-26
*@創建時間上午09:36:58
*@描述——
*/
publicstaticvoiddeleteFile(Filefile){
if(file.exists()){//判斷文件是否存在
if(file.isFile()){//判斷是否是文件
file.delete();//delete()方法你應該知道是刪除的意思;
}elseif(file.isDirectory()){//否則如果它是一個目錄
Filefiles[]=file.listFiles();//聲明目錄下所有的文件files[];
for(inti=0;i<files.length;i++){//遍歷目錄下所有的文件
deleteFile(files[i]);//把每個文件用這個方法進行迭代
}
}
file.delete();
}else{
System.out.println("所刪除的文件不存在!"+' ');
}
}

/**
*@說明創建文件夾,如果不存在的話
*@paramdirPath
*@作者王建明
*@創建日期2012-5-26
*@創建時間上午09:49:12
*@描述——
*/
publicstaticvoidcreateMirs(StringdirPath){
FiledirPathFile=newFile(dirPath);
if(!dirPathFile.exists())
dirPathFile.mkdirs();
}
}

㈡ java中處理中文輸入,不需要用到的類是

Java把不同類型的輸入、輸出抽象為流stream,分為輸入流和輸出流,用統一的介面來表示
Java開發環境中提供了包java.io,其中包括一系列的類來實現輸入/輸出處理
InputStream是所有位元組輸入流的祖先,而OutputStream是所有位元組輸出流的祖先
public abstract class InputStream implements Closeable
public abstract class OutputStream implements Closeable, Flushable
具體子類: ByteArrayInputStream, FileInputStream, FilterInputStream, ObjectInputStream,
PipedInputStream, SequenceInputStream, StringBufferInputStream
InputStream
InputStream類是一個抽象類,方法包括:
int read()
int read(byte[])
int read(byte[],int,int)
void close()關閉流
int available()報告流中直接可讀的位元組數
skip(long)跳過流中指定的位元組
OutputStream
OutputStream也是一個抽象類。它的主要方法包括:
void write(int)
void write(byte[])
void write(byte[],int,int)
其中第一個方法的int型的參數對應要寫入的位元組,後兩個方法的參數與InputStream類似。
void close() 關閉輸出流
void flush() 強行將寫入緩沖區中剩餘的數據寫入
File file = new File("d:\\FileTest.java");
if (file.exists()) {
try (InputStream is = new FileInputStream(file);) {
byte[] buffer = new byte[8192];
int len = is.read(buffer);
while (len > 0) {
System.out.write(buffer, 0, len);
len = is.read(buffer);
}
} catch (Exception e) {
e.printStackTrace();
}
}
InputSream 和 OutputStream 中定義了 read() 和 write() 方法,它們被派生流類重載。位元組流是位元組序
列,它與外部設備中的位元組存在著一一對應的關系,不存在字元的轉換,被讀寫位元組的個數與外部設備中的位元組個數是相同的
基本輸入輸出方法
System類是Java語言中一個功能強大、非常有用的類,它提供了標准輸入/輸出及運行時的系統信息
System類不能創建對象,也就是說,System類的所有屬性和方法都是靜態的,引用時要以System 作為前綴
System.in與System.out是System類的兩個靜態屬性,分別對應了系統的標准輸入/輸出流 System類管理標准輸入輸出流和錯誤流
System.out:把輸出送到預設的顯示(通常是顯示器),是PrintStream的對象
System.in:從標准輸入獲取輸入(通常是鍵盤),是InputStream的對象
System.err:把錯誤信息送到預設的顯示,是PrintStream的對象
同時使用System.out和System.err輸出信息不能保證顯示順序就是執行順序,為了避免這種情況在測試代碼執行中經常使用System.err輸出

FileInputStream、FileOutputStream 順序讀取文件
PipedInputStream、PipedOutputStream 管道
ByteArrayInputStream、ByteArrayOutputStream 內存讀寫
FilterInputStream、FilterOutputStream 過濾流(有多線程同步)
DataInputStream、DataOutputStream 對數據類型讀寫,有多線程同步
BufferedInputStream、BufferedOutputStream 緩沖類型讀寫

1 、使用位元組流進行文件的單位元組復制
FileInputStream是InputStream的子類,FileInputStream屬於節點流,用於按位元組讀取文件內容
FileOutputStream是OutputStream的子類,FileOutputStream屬於節點流,用於按位元組輸出數據到文件中
//FileInputStream中read方法的定義
/**
從指定的輸入流中按位元組讀取數據,如果讀到流的末尾則返回-1,否則返回讀取到的數據。如果文件不存
在則異常FileNotFoundException【IOException的子類】
*/
public int read() throws IOException {
return read0();
}
//FileOutputStream中write方法的定義
//屬性,用於表示是否進行文件的追加操作而不是覆蓋操作
private final boolean append;
//構造器方法的定義,其中name是文件名稱,默認採用覆蓋操作
public FileOutputStream(String name) throws FileNotFoundException {
this(name != null ? new File(name) : null, false);
}
//按照位元組執行寫出int數據,自動會去除多餘的位元組。如果文件不存在則自動創建新文件,如果
文件已經存在則按照append的值決定採用的是追加操作還是覆蓋操作
public void write(int b) throws IOException {
write(b, append);
}
private native void write(int b, boolean append) throws IOException; //
由VM採用對等類的方式提供實現
public class Test1 {
public static void main(String[] args) throws IOException {
try (InputStream is = new FileInputStream("c:/面向對象文檔.txt");
OutputStream os = new FileOutputStream("test.txt");) {
int kk;
while ((kk = is.read()) != -1) {
os.write(kk);
}
}
}
}
2 、讀取 A.java 文件並在控制台上顯示
如何使用控制台輸出 : System.out 位元組流
分析:使用位元組流從 A.java 中一個位元組一個位元組的讀取內容,然後再使用 System.out.print 方法輸出即可
注意:讀取操作返回的 int 的取值范圍為 0-255 ,則表示這里不會有符號位,所以 is.read()==-1 不是只適合於文本文件
File ff = new File("T1.java");
if (ff.exists()) {// 如果文件存在則進行拷貝操作,否則提示文件不存在
InputStream is = new FileInputStream(ff);
OutputStream os = new FileOutputStream("t1.bak");
while (true) {
int kk = is.read();// 返回值應該是0-255,如果返回-1表示流已經結束
if (kk < 0)break;
os.write(kk);
}
is.close();
os.close();
} else
System.out.println("T1.java文件不存在");
InputStream基本輸入類
InputStream類是基本的輸入類。它定義了所有輸入流所需的方法。

public abstract int read() throws IOException讀取一個位元組並以整數的形式返回,0-255。如果 返回-1已到輸入流的末尾。
public int read(byte b[]) throws IOException讀取一系列位元組並存儲到一個數組,返回實際讀取的 位元組數。如果已經讀到輸入流的末尾則返回-1
public void close() throws IOException 關閉輸入流並釋放資源
public int read(byte b[],int offset,int length) throws IOException功能為從輸入流中讀數據。這一 方法有幾種重載形式,可以讀一個位元組或一組位元組。當遇到文件尾時,返回-1。最後一種形式中的 offset是指把結果放在b[]中從第offset個位元組開始的空間,length為長度
public long skip (long n) throws IOEnception 從輸入流跳過幾個位元組。返回值為實際跳過的位元組數
OutputStream基本輸出類
三個重載形式都是用來向輸出流寫數據的
public abstract void write(int b)向輸入流寫入一個位元組數據,該位元組為參數的低8位。
public void write(byte b[],int offset,int length)將一個位元組類型的數組中的從指定位置offset開始 的length個位元組寫入到輸出流
public void close( ) 關閉輸出流,釋放資源
public void write(byte b[])將一個位元組類型的數組中的數據寫入到輸出流
public void flush() 清除緩沖區,將緩沖區內尚未寫出的數據全部輸出
字元流
在頂層有 Reader 和 Writer 兩個抽象類。 Reader 和 Writer 中定義了 read() 和 write() 方法,它們被派生流類重載
Reader 抽象類的定義
public abstract class Reader implements Readable, Closeable {
//BIO,讀取一個有效的字元,返回值為0到65535的整數,如果到達流的末尾則返回-1
public int read() throws IOException
//BIO,讀取字元存儲到char數組中,返回讀取的字元個數,流結束則返回-1
public int read(char cbuf[]) throws IOException
//關閉流,同時釋放資源
abstract public void close() throws IOException;
Writer 抽象類的定義
public abstract class Writer implements Appendable, Closeable, Flushable {
//寫出一個字元到字元流,要寫的字元包含在給定整數值的16個低位;16個高位被忽略。
public void write(int c) throws IOException
//將字元數組中的指定部分內容壓入到字元流,從off開始共len個字元
abstract public void write(char cbuf[], int off, int len) throws
IOException;
/關閉流,同時釋放資源
abstract public void close() throws IOException;
相關的子類
InputStreamReader、OutputStreamWriter橋接流,用於自動實現位元組流和字元流的轉換
FileReader、FileWriter文件流,用於實現針對文本文件的讀寫操作
CharArrayReader、CharArrayWriter內存流,用於實現針對char數組的讀寫操作
PipedReader、PipedWriter管道流,用於線程之間的通訊
FilterReader、FilterWriter過濾流的父類
BufferedReader、BufferedWriter緩存流,用於在流中添加緩沖區
StringReader、StringWriter內存流,用於實現針對字元串的讀寫操作

使用字元流實現 txt 文件的讀取顯示【其中包含中文】
編寫一個程序,讀取文件 test.txt 的內容並在控制台輸出。如果源文件不存在,則顯示相應的錯誤信息。
字元流 Reader
int read()讀取一個字元並以整數的形式返回0-65535,如果返回-1則已到輸入流末尾
int read(char[] cbuf)讀取一系列字元並存儲到一個數組中,返回實際讀取的字元數,如果讀到輸入流末尾則返回-1
void close()關閉輸入流並釋放內存資源
int read(char[] cbuf, int off, int len) 讀取len個字元並存儲到一個數組中,從off位置開始,返回實
際讀取的字元數,如果讀取到輸入流末尾則返回-1
long skip(long n)跳過n個字元不讀,返回實際跳過的位元組數
字元流 Writer
void write(int c) 將字元(int數組的低8位)壓入到字元流中
void write(char[] cbuf, int off, int len)將字元數組中的指定部分內容壓入到字元流中,從off開始共len個字元
void write(String str) 將字元串中的內容壓入到字元流中
void close() 關閉流並釋放所佔用的資源
void write(String str, int off, int len) 將字元串中的指定部分內容壓入到字元流中,從下標off開始共len個字元
void flush()刷新緩沖區,將緩沖區中的數據全部送出到目標地,然後清空緩沖區
void write(char[] cbuf) 將字元數組中的所有數據壓入到字元流中
一般來說:一次讀寫一個字元效率太低,可以引入 char[] 數組提高執行效率
小結
在學些BIO時記憶父類的方法,區分子類的實現不同
InputStream中的方法 read(byte[]):int; Reader中方法read(char[]):int 如果到達流末尾 則-1
OutputStream中的方法 write(byte[],0,len):void;Writer中的方法 write(char[],0,len)/write(String)
一般在使用中,如果讀取數據使用位元組流,則寫出數據採用的也是位元組流;不建議混用,除非引入 橋接流
文件流
FileInputStream("file-name") FileInputStream(File) FileNotFoundException
FileReader("file-name") FileReader(File) FileNotFoundException
FileOutputStream("file-name") FileOutputStream("file-name",true) 默認文件覆蓋,如果 參數true表示追加
FileWriter("file-name") FileWriter("file-name",true)
一般不使用單位元組或者單字元的操作方法,使用數組
注意:try(){}是推薦寫法,否則應該使用try{}finally{}結構保證流的關閉
針對二進制文件不建議使用字元流,建議使用位元組流進行操作,否則有可能拷貝文件出現問題:

如果針對文本文件則建議使用字元流,因為編碼使用比較方便

文章知識點與官方知識檔案匹配
Java技能樹類和介面類和面向對象
89124 人正在系統學習中
點擊閱讀全文
打開CSDN,閱讀體驗更佳

java用於輸入輸出流的類_java輸入輸出流_lsgn的博客
java輸入輸出流 java IO綜述 在整個Java.io包中最重要的就是5個類和一個介面。5個類指的是File、OutputStream、InputStream、Writer、Reader;一個介面指的是Serializable。 Java I/O主要包括如下幾個層次,包含三個部分: ...
java常見輸入輸出類型_3分鍾秒懂大數據的博客
輸入:每行輸入一個數,連續輸入n行,遇到0結束輸入,然後輸出結果。 importjava.util.ArrayList; importjava.util.Scanner; publicclassTest4{ publicstaticvoidmain(String[] args){ Scannersc=newScanner(System.in); ...
25、JAVA進階——輸入輸出流
一、認識Java的流 二、使用位元組流讀寫文本文件 1、使用位元組流類FileInputStream讀文本文件 2、使用位元組流類FileOutputStream寫文本文件 三、使用字元流讀寫文本文件 1、使用字元流類BufferedReader和FileReader讀文本文件 2、使用字元流類BufferedWrite和FileWrite寫文本文件 四、讀寫二進制文件 1、 使用位元組流讀二進制文件 2、 使用位元組流寫二進制文件 五、序列化和反序列化 1、認識序列化 2、序列化保存對
繼續訪問

java 輸入類_java 輸入輸出類
java中輸入輸出類如果理不清思路的話就會很混亂!一.File類提供與操作系統無關的文件操作!可以查看api文檔了解它的方法二.輸出操作:1.把信息輸出到屏幕上最簡單的操作就是使用標准輸出:System.out.println();下面討論一下流方式的輸出,與之相關的類如下OutputStreamWriter:它提供字元流到位元組流的轉換,換句話說它寫入字元數據然後按照指定字元集轉換為位元組數據Buf...
繼續訪問
JAVA的輸入輸出_努力的地球人的博客_java輸出
Java的輸入 Scanner類 為了使用scanner類,我們首先需要導入java.util.Scanner包 import java.util.Scanner; 1 創建scanner對象,從用戶獲取輸入 //創建scanner對象 Scanner str=new Scanner(System.in); //接受用戶輸入 int w=str.nextIn...
java輸入輸出_java中輸入輸出總結_weixin_39609407的博客
標准輸入studin,對象是鍵盤。 標准輸出stdout,對象是屏幕。 標准錯誤輸出stderr,對象也是屏幕。 二、java.io包中的數據流和文件類 位元組流:從InputStream和OutputStream派生出來的一系列類。這類流以位元組(byte)為基本處理單位。
Java——不同數據類型的輸入輸出方式與轉化方式
java 中不同數據類型的 輸入方法 輸出格式 與 轉化方式
繼續訪問

Java文本輸出常用類
package com.ss.extract; import java.io.*; import org.apache.log4j.Logger; /** * 結果輸出類 * @author Shu */ public class ResultOutput { private ...
繼續訪問
1.Java基礎入門 -(2)輸入輸出類_菜鳥的小蟲子的博客
一. Java Scanner 類 java.util.Scanner是 Java5 的新特徵,我們可以通過 Scanner 類來獲取用戶的輸入。 Scanner 對象的基本語法: Scanner in= new Scanner(System.in); 示例1: 輸入結果: ...
java的輸入輸出流類型_理解JAVA輸入輸出流_天接雲濤的博客
1、位元組流抽象類 InputStream輸入流 OutputStream輸出流 2、字元流抽象類 Reader 輸入字元流 Writer 輸出字元流 四、JAVA中流體系架構 有一些對流進行操作的基本的方法,我們以文件輸入輸出流進行說明: ...
java的輸出類
System.out這個類是PrintStream類,定義如下 public class PrintStream extends FilterOutputStream PrintStream都是用print的相關函數輸出到控制台上。print的實現都是用write(String s)實現。 而,PrintWriter這個輸出類,也同樣實現輸出:PrintWriter extends ...
繼續訪問
Java中的各種輸出形式
一、Java中的各種輸出形式: package cn.jl.lwj; public class Demo00 { public static void main(String[] args) { //標識符定義 區分大小寫 int a = 5; int A = 6; //區分大小寫 int Class = 6; int age = 5; //定義常量 final int AGE_MAX = 30;...
繼續訪問
java中的BIO基礎-3
java中的io基礎
繼續訪問
Java學習-IO流進階
緩沖流也稱為高效流、或者高級流。之前學習的位元組流可以稱為原始流。
繼續訪問

IO進階之高級IO
高級IO
繼續訪問
Java中的IO進階操作
Java中的IO進階操作 一、序列化和反序列化 常用於多台伺服器之間進行java對象的數據傳遞。 1.概念 序列化 是指程序中准備好的Java對象,永久的保存在磁碟中,這個過程其實是一個out的動作。 ObjectOutputStream:通過在流中使用文件可以實現對象的持久存儲。 創建對象:ObjectOutputStream(OutputStream out) 常用方法: void writeObject(Object obj):將指定的對象寫入ObjectOutputStream 反序列化 是指把
繼續訪問
Java IO最詳解,歡迎提出意見
Java IO 詳解 初學java,一直搞不懂java裡面的io關系,在網上找了很多大多都是給個結構圖草草描述也看的不是很懂。而且沒有結合到java7 的最新技術,所以自己來整理一下,有錯的話請指正,也希望大家提出寶貴意見。 首先看個圖:(如果你也是初學者,我相信你看了真個人都不好了,想想java設計者真是煞費苦心啊!) 這是java io 比較基本的一些處理流,除此之外我們還會...
繼續訪問
java輸出類型_java中各種類型的輸入輸出
import java.lang.Exception;import java.lang.String;import java.util.Scanner;public class test {public static void main(String[] args) {Scanner s = new Scanner(System.in);char ch;System.out.print("Char...
繼續訪問
java中輸入流的類_Java中的輸入/輸出流類
Java中包含的輸入/輸出流類 1.java.io包中的介面 (1)處理位元組流的有DataInput介面和DataOutput介面,RandomAccessFile同時實現了這兩個介面; (2)處理對象流的有ObjectInput介面和ObjectOutput介面,ObjectInputStream類實現了ObjectInput介面,ObjectOutputStream類實現了ObjectOutp...
繼續訪問
使用java的輸入/輸出類
1. 什麼是IO? I:input 輸入 通常做讀取操作(將不同數據源的數據讀入到內存中,也叫讀取流) O:output 輸出通常做寫入操作(將內存中的數據寫入到不同的數據源,也叫寫入流) 2. 理解流的概念。 想像一下自來水公司要把水輸到用戶家裡,應該先把自來水公司到用戶家裡的連接水管建好,再將水輸出去。管道里輸送的是水,但IO里輸送的是位元組。 u流是...
繼續訪問
Java中的輸入/輸出流類
Java中包含的輸入/輸出流類 1.java.io包中的介面 (1)處理位元組流的有DataInput介面和DataOutput介面,RandomAccessFile同時實現了這兩個介面; (2)處理對象流的有ObjectInput介面和ObjectOutput介面,ObjectInputStream類實現了ObjectInput介面,ObjectOutputStream類實現了ObjectOutp...
繼續訪問
最新發布 【Java基礎】自定義一個格式輸出類
在項目實際開發中,後端介面都按照一定的格式輸出給前端調用,在返回中包括狀態碼和介面的主要作用等注釋,再包含實際的data。
繼續訪問

IO流(進階提高)
本篇文章繼上一篇IO流(小試牛刀)繼續更新JavaIO流的知識。 常見IO流的結構圖解: 回顧一下IO的基本介面知識: ————————————————————我是不起眼的分割線———————————————————————— IO的序列化與反序列化 Java序列化是指把Java對象轉換為位元組序列的過程;Java反序列化是指把位元組序列恢復為Java對象的過...
繼續訪問
java進階8——IO流
File類 File概述 File文件和目錄路徑名的抽象表示形式。即,Java中把文件或者目錄(文件夾)都封裝成File對象。也就是說如果我們要去操作硬碟上的文件,或者文件夾只要找到File這個類即可。 File類的構造函數 File(String pathname); // 將一個字元串路徑封裝成File對象 File(String parent,String child);...
繼續訪問
Java IO流進階之常用流(一)
請多參考JDK文檔:http://www.matools.com/api/java8或https://docs.oracle.com/javase/8/docs/api/ 轉換流——OutputStreamWriter類和InputStreamReader類 位元組與字元的轉換流: OutputStreamWriter:是Writer類的子類,將輸出的字元流變為位元組流。 InputStreamRe...
繼續訪問
詳解JAVA I/O之二——java.io層次結構
<br />java I/O(Input/Output)學習——java.io層次結構文章分類:Java編程stream代表的是任何有能力產出數據的數據源,或是任何有能力接收數據的接收源。在Java的IO中,所有的stream(包括Inputstream和Out stream)都包括兩種類型: <br />(1)位元組流 <br /><br /> 表示以位元組為單位從stream中讀取或往stream中寫入信息,即io包中的inputstream類和outputstream類的派生類。通常用來讀取二進制數據,

㈢ 有人用java寫過文本分類系統嗎

文本分類的重點不在分類,而在怎麼樣描述文本模型和提取文檔中的terms並把它數字化,轉化為分類器可以使用的輸入類型。這前面的處理直接關繫到後面分分類效果。就文本模型而言,現在普遍使用的還是Salton 和 McGill的Vector Space Model, 通過TF-IDF統計,如果是英文的話,要進行語義層次的抽象, 這方面可以使用WordNet,網上可以找到JAVA wordnet 的API,,個人認為比較好的是JWNL 如果是中文的話,涉及到分詞, 中科院計算所分詞系統ICTCLAS, 可到其網站上下載免費版。
至於JAVA寫的分類器很多,常用的比如說Weka, RapidMiner(這個相當不錯,有專門的Web data Mining的擴展包,是我的最愛),這些都可以自己調用其介面實現新的演算法。個人強烈推薦使用RapidMiner,功能相當強大,幾乎實現了當前的所有機器學習的演算法,並且操縱簡便。
學習提示:不要剛開始就希望效果很好,急躁是做學問的大敵,肯定會出現一些意想不到的問題,最主要是勤於思考,善於查找問題,慢慢改進,一個問題,如果比較難,回到它最原始最簡單的問題上去。祝你學業進步。

㈣ java 流的分類有哪些

1. 處理的數據單位不同,可分為:字元流,位元組流
位元組流河字元流的區別:(各自在什麼情況下使用)
字元流處理的單元為2個位元組的Unicode字元,分別操作字元、字元數組或字元串,而位元組流處理單元為1個位元組, 操作位元組和位元組數組。所以字元流是由Java虛擬機將位元組轉化為2個位元組的Unicode字元為單位的字元而成的,所以它對多國語言支持性比較好!如果是 音頻文件、圖片、歌曲,就用位元組流好點,如果是關繫到中文(文本)的,用字元流好點.
2.數據流方向不同,可分為:輸入流,輸出流
3.功能不同,可分為:節點流,處理流;
節點流:節點流從一個特定的數據源讀寫數據。
處理流:「連接」在已存在的流(節點流或處理流)之上通過對數據的處理為程序提供更為強大的讀寫功能。
看到左上角那個頭像沒,點一下這里有一群討論問題的朋友;

㈤ java讀取txt文件並且進行分類

public static void main(String[] args) throws Exception{
File file=new File("D:\\output.txt");
BufferedReader reader=new BufferedReader(new FileReader(file));

String r=null;

int one=0,two=0,three=0;
String [] temp=null;
while((r=reader.readLine())!=null)
{
if(r.contains("one"))
{
temp=r.split(":", r.length());
if(temp!=null)
{
if(!" ".equals(temp[1]))
{
one+=Integer.valueOf(temp[1]);
}
else{
one+=0;
}
}
}

else if(r.contains("two"))
{
temp=r.split(":", r.length());
if(temp!=null)
{
if(!" ".equals(temp[1]))
{
two+=Integer.valueOf(temp[1]);
}
else{
two+=0;
}
}
}
else if(r.contains("three"))
{
temp=r.split(":", r.length());
if(temp!=null)
{
if(!" ".equals(temp[1]))
{
three+=Integer.valueOf(temp[1]);
}
else{
three+=0;
}
}
}
}

System.out.println("One="+one+" ;Two="+two+" ;Three="+three);
}

自己測試一下:這是我的輸出結果
Console:

One=190 ;Two=0 ;Three=410

㈥ 關於java新聞網站的演算法

(一) 演算法倫理的研究
1.演算法內涵界定。演算法源於數學,但現代演算法又遠遠不止於傳統數學的計算范疇。演算法多被理解為是計算機用於解決問題的程序或步驟,是現代人工智慧系統的運行支柱。《計算主義:一種新的世界觀》(李建會等,2012)中將演算法定義為能行的方法,在外界的常識性理解中所謂演算法就是能感受到的一套運算規則,這個規則的特點在於運算時間的有限性、計算步驟的有窮性、輸入結果的確切性,它是機械步驟或能行可算計程序。該定義點明了演算法應具備的兩個基本屬性——有限性與有窮性。《用計算的觀點看世界》( 酈全民,2016) 則從信息傳播的角度解讀演算法,認為演算法實質上是信息處理方法。
2.演算法倫理研究
倫理關乎道德價值真理及其判斷。存在於自然界、社會中的人,其行為應遵循一定的倫理道德規范。倫理的效應要導向善。倫理道德關注對個體存在的尊重、個體的自由、公平正義以及組織團體的延續與發展等問題。在一定程度上可以說,當今的人類社會已經不能脫離智能演算法系統而運行了。
演算法無時無處不在對世界產生影響,因而演算法也會必然的觸碰到倫理道德。和鴻鵬(2017)已指出,演算法系統在人類社會生活中的廣泛應用,會陷入諸多如人類面臨且無法迴避的倫理兩難選擇困境之中。而當演算法與倫理發生關聯時,學界一般認為會引出職業倫理和技術倫理兩種倫理問題。
職業倫理主要與演算法系統的開發者有關,指開發者是帶有個性價值觀、倫理道德觀去研發演算法系統的行為體,因而演算法系統一開始便會摻雜著設計人主觀性的倫理道德觀。設計者出於何種目的開發某演算法系統、面對不同問題設計者持有的倫理道德態度,這些都會在演算法系統的運行中得到體現。
技術倫理是演算法系統在一定意義上可稱之為一種科學技術,這種技術自身及其運作結果都會負載著倫理價值。其實在一些情況下,職業倫理與技術倫理之間並沒有很明確的界別,關於這一點,劉則淵跟王國豫已做過論述。
本文將主要從技術倫理的角度對演算法關涉倫理這一問題嘗試做深入研究。
(二)網路新聞傳播的演算法倫理研究
演算法與技術的融合不斷英語於網路新聞傳播領域中,從數據新聞到機器寫作,從演算法推送到輿情到分析,國內新聞傳媒領域的機器新聞和相關研究逐漸發展,金兼斌在《機器新聞寫作:一場正在發生的革命》(2014),作者較早的將眼光聚焦於基於演算法的新聞內容生產和編輯。認為在自動化新聞生產大發展的前提下,諸如新聞生產或分發中勞動密集型的基礎性工作與環節都將被技術取代。張超、鍾新在《從比特到人工智慧:數字新聞生產的演算法轉向》(2017) 認為演算法正在從比特形式走向人工智慧階段,這種轉向使得數字新聞與傳統新聞的邊界進一步明晰,促使數字新聞生產也產生了變革。胡萬鵬在《智能演算法推薦的倫理風險及防範策略》中總結了從演算法推送方面:針對新聞的價值觀所受到的負面影響;以及新聞的公共性、客觀性和真實性受到的削弱進行分析;從受眾方面:將具體對信息繭房現象以及受眾的知情權和被遺忘權展開探討;從社會影響方面,則針對社會群體、社會公共領域和社會文化所受到的消極影響展開論述。
根據以上文獻的梳理可以看出,國內目前對網路新聞傳播的演算法倫理研究主要集中在新聞業態演算法倫理失范的相關問題,因為與其他失范問題相比,這是比較容易發現的。但目前關於網路新聞傳播的演算法倫理的國內研究還存在不足:國內演算法倫理和網路新聞傳播演算法倫理的研究還是在起步階段,比較成熟的系統性研究還未出現;關於演算法開發人員和平台的責任機制的研究都比較薄弱,總上所述,演算法推送新聞的倫理問題研究是有必要繼續加強的。
2.新聞推薦演算法的興起、發展與原理
2.1 新聞推薦演算法的興起
隨著計算機技術的信息處理的維度越來越高,信息處理的能力不斷提升,演算法技術可以從大數據中篩選出用戶最關心最感興趣的信息,改變了原有的新聞信息傳播方式,重塑了新的媒介生態和傳播格局。
但反過來看,在人人都能生產信息的背景下,信息的生產、傳播和反饋的速度都是呈幾何倍數增長,用戶面對的信息越來越多。由於設備的局限性和信息海量,用戶無法集中注意力看自己感興趣的內容,也無法及時抓取對自己有用的信息,於是出現了「注意力經濟」。美國經濟學家邁克爾·戈德海伯(1997)認為,當今社會是一個信息極大豐富甚至泛濫的社會,而互聯網的出現,加快了這一進程,信息非但不是稀缺資源,相反是過剩的。相對於過剩的信息,只有一種資源是稀缺的,那就是人們的注意力。換句話說,信息不能夠一味追求量,還要有價值,價值就在於用戶對信息的注意力,誰獲得了用戶的注意力就可以有市場的發展空間,通過「販賣」用戶的注意力能夠使新媒體聚合平台獲得利潤,維持發展。再加上現在生活節奏越來越快,人們對信息獲取的量和效率要求提高,不想把時間浪費在自己不感興趣的信息,從而用戶獲取信息的「個性化」特徵變得明顯起來。
基於此背景下,演算法推送新聞的傳播機制應運而生,用戶不需要特意搜索自己需要的信息,而是海量的信息會自行「找到」用戶,為用戶節省搜索時間之餘,又能做到真正為用戶提供有用的信息。
2.2新聞推薦演算法的發展現狀
演算法推薦是依據用戶數據為用戶推薦特定領域的信息,根據受眾使用反饋不斷修正並完善推薦方案。目前主要有兩類新聞機構使用演算法推送,其一是新型的互聯網新聞聚合類平台,國內主要是以今日頭條和一點資訊等演算法類平台為代表,在我國新聞客戶端市場上擁有極高的佔有率。張一鳴創建今日頭條是依靠大數據和演算法為用戶推薦信息,提供連接人與信息的服務,演算法會以關鍵詞等元素判斷用戶的興趣愛好,從全網抓取內容實現個性化推薦。國外則是以Facebook、Instagram等平台為代表,這些APP都是通過演算法挖掘用戶的數據,以用戶個性化需求為導向對用戶進行新聞推送。另一種則是專業新聞生產的傳統媒體,為積極應對新聞市場的競爭和提高技術水平而轉型到新聞全媒體平台,如國內的「人民日報」等,國外利用演算法推送向用戶推送新聞的傳統媒體則有美國的美聯社、華盛頓郵報和英國的BBC等,他們利用演算法監督受眾的數量還有閱讀行為,使他們的新聞報道能夠更加受受眾的喜歡,增加用戶的粘性。
2.2 新聞推薦演算法的原理
2.2.1 新聞推薦演算法的基本要素
演算法推送有三個基本要素,分別是用戶、內容和演算法。用戶是演算法推送系統的服務對象,對用戶的理解和認知越是透徹,內容分法的准確性和有效性就越准確。內容是演算法推送系統的基本生產資料,對多種形式內通的分析、組織、儲存和分發都需要科學的手段與方法。演算法是演算法推送技術上的支持,也是最核心的。系統中大量用戶與海量的信息是無法自行匹配的,需要推送演算法把用戶和內容連接起來,在用戶和內容之間發揮橋梁作用,高效把合適的內容推薦給合適的用戶。
2.2.2 新聞推薦演算法的基本原理
演算法推送的出現需要具備兩個條件:足夠的信息源和精確的演算法框架。其中,演算法的內容生產源與信息分發最終效果密切相關:是否有足夠多的信息可供抓取與信息是否有足夠的品質令用戶滿意都將對信息的傳播效果產生影響。與此同時,分發環節也在向前追溯,改變著整個傳播的生態。目前,國內新聞傳播領域所使用的演算法推送主要有三大類——協同過濾推送、基於內容推送和關聯規則推送。
協同過濾推送分為基於用戶的協同過濾和基於模型的協同過濾。前者主要考慮的是用戶和用戶之間的相似度,只要找出相似用戶喜歡的新聞文章類別,並預測目標用戶對該文章的喜歡程度,就可以將其他文章推薦給用戶;後者和前者是類似的,區別在此時轉向找到文章和文章之間的相似度,只有找到了目標用戶對某類文章的喜愛程度,那麼我們就可以對相似度高的類似文章進行預測,將喜愛程度相當的相似文章推薦給用戶。因此,前者利用用戶歷史數據在整個用戶資料庫中尋找相似的推送文章進行推薦,後者通過用戶歷史數據構造預測模型,再通過模型進行預測並推送。
基於內容的推送即根據用戶歷史進行文本信息特徵抽取、過濾,生成模型,向用戶推薦與歷史項目內容相似的信息。它的優點之一就是解決了協同過濾中數據稀少時無法准確判斷分發的問題。但如果長期只根據用戶歷史數據推薦信息,會造成過度個性化,容易形成「信息繭房」。
關聯規則推送就是基於用戶歷史數據挖掘用戶數據背後的關聯,以分析用戶的潛在需求,向用戶推薦其可能感興趣的信息。基於該演算法的信息推薦流程主要分為兩個步驟,第一步是根據當前用戶閱讀過的感興趣的內容,通過規則推導出用戶還沒有閱讀過的可能感興趣的內容;第二是根據規則的重要程度,對內容排序並展現給用戶。關聯規則推送的效果依賴規則的數量和質量,但隨著規則數量的增多,對系統的要求也會提高。
2.2.3 演算法推送的實現流程
在信息過載的時代,同一個新聞選題有很多同質化的報道,因此分發前需要對新聞內容進行消重,消重後的新聞內容便等待推送,此時的推送有三個類別:啟動推送、擴大推送和限制推送。
第一類是啟動推送,先對用戶精準推送,即將其訂閱賬號的更新內容第一時間向用戶推薦;然後根據用戶的歷史瀏覽數據,把相似的文本特徵歸類後推送給其他用戶;最後是給關注用戶的相似人群進行推薦。第二類擴大推送是指對於某個點擊率、閱讀時長都明顯高於平均水平的新聞內容,系統會將它自動篩選出來,並向更多的人進行推薦。但在擴大推薦的過程中,系統會依據用戶的反饋進行調整。第三為限制推送,指某個點擊率、閱讀時長都明顯低於平均水平的新聞內容,會被系統自動篩選出來,遏制推送,這樣的內容會被縮小推薦范圍。

3. 「今日頭條」新聞推薦演算法分析
「今日頭條」是國內一款資訊類的媒體聚合平台,每天有超過1.2億人使用。從「你關心的,才是頭條!」到如今的「信息創造價值!」,產品slogan的變化也意味著今日頭條正逐漸擺脫以往單一、粗暴的流量思維,而開始注重人與信息的連接,在促進信息高效、精準傳播的同時注重正確的價值引導。
在2018年初,「今日頭條」的資深演算法架構師曹歡歡博士在一場分享交流會上公開了其演算法運行原理。在他的敘述中,非常詳細地介紹了「今日頭條」的演算法推薦系統概述以及演算法推薦系統的操作原理。

3.1.1-1 曹歡歡博士的今日頭條演算法建模
上圖用數學形式化的方法去描述「今日頭條」的演算法推送,實際上就是一個能夠得出用戶對內容滿意程度的函數:即y為用戶對內容的滿意度,Xi,Xc,Xu分別是今日頭條公開的演算法推送的三個維度:Xi是用戶,包括用戶的性別、年齡、職業和興趣標簽,還有其他演算法模型刻畫的隱形用戶偏好等;Xc是環境,這也是移動互聯網時代新聞推送的特點,由於用戶隨時隨地在不停移動,移動終端也在移動,用戶在不同的工作場合、旅行等場景信息推送偏好也會不同;Xu是內容,今日頭條本身就是信息聚合類平台,平台上涵蓋各種不同形式的內容。本章將以該函數為基礎,逐一分析今日頭條的推薦演算法。
3.1 推薦維度之一:內容分析
內容分析原指第二次世界大戰期間,傳播學家拉斯韋爾等研究學家組織了「戰士通訊研究」的工作,以德國公開出版的戰時報紙為分析研究對象,弄清報紙內容本質性的事實和趨勢,揭示隱含的隱性情報內容,獲取了許多軍情機密情報並且對事態發展作出情報預測。在「今日頭條」中,內容分析則是對文章、視頻內容提取關鍵要素,通過對文本、視頻標題關鍵字進行語義識別,給內容進行分類。「今日頭條」的推送系統是典型的層次化文本分類演算法,來幫助每篇新聞找到合適的分類,比如:第一大分類是政治、科技、財經、娛樂、體育等,體育類可以下分籃球、足球、網球等,足球又可以下分中國足球和國際足球,中國足球最後下分為甲、中超、國家隊等。這一步是對文章進行對這個工作主要目的是對文章進行分類,方便以後對客戶推薦。
想要內容分析實現效果,則需要海量的內容信息給演算法系統提供有效的篩選和分類。「今日頭條」既然是依賴於演算法推送新聞,那它背後的資料庫必然是強大的,「網頁蜘蛛」和「頭條號」就是支撐今日頭條平台消息來源的重要渠道,其消息來源極其豐富,何時何地有何新鮮事,都能高效率抓取信息。
第一個消息來源的渠道是「網頁蜘蛛」,「網頁蜘蛛」又叫網頁爬蟲,頭條使用的就是搜索引擎爬蟲叫「Bytespider」。它能按照一定的規則,自動爬行抓取互聯網的信息或腳本,就像蜘蛛通過蛛網進行捕食,當發現新的信息資源,蜘蛛會立刻出動抓取信息內容並將其收入自己的資料庫中。和微信的垂直搜索不同,Bytespider是能夠抓取全網內容的全新搜索引擎,因此「今日頭條」的搜索引擎功能很全面,搜索的資源很廣,資源包容性極高。
Bytespider信息抓取的基本流程如下:首先是網頁抓取。Bytespider順著網頁中的超鏈接,從這個網站爬到另一個網站,通過超鏈接分析連續訪問抓取更多網頁。被抓取的網頁被稱之為網頁快照。由於互聯網中超鏈接的應用很普遍,理論上,從一定范圍的網頁出發,就能搜集到絕大多數的網頁。第二步是處理網頁。搜索引擎抓到網頁後,還要做大量的預處理工作,才能提供檢索服務。其中,最重要的就是提取關鍵詞,建立索引庫和索引。其他還包括消除重復網頁、判斷網頁類型、分析超鏈接、計算網頁的重要度、豐富度等。第三步提供檢索服務。用戶輸入關鍵詞進行檢索,搜索引擎從索引資料庫中找到匹配該關鍵詞的網頁,為了用戶便於判斷,除了網頁標題和URL外,還會提供一段來自網頁的摘要以及其他信息。
第二個消息來源渠道是「頭條號」。與「今日頭條」不同,它是今日頭條針對媒體、國家機構、企業以及自媒體推出的專業信息發布平台。致力於幫助生產者在移動互聯網上高效率地獲得更多的曝光和關注。簡單來說頭條號是媒體在上面撰寫並發布文章、視頻後,會在今日頭條(包括今日頭條極速版)平台展示。通過頭條號後台,媒體可以看到具體文章推薦量、閱讀量、粉絲閱讀量、評論量、轉發量和收藏量,最後通過這些可以量化的用戶閱讀行為的反饋,演算法系統進一步對目標用戶進行內容推薦。
3.2 推薦維度之二:用戶分析
用戶分析通過提取用戶的有效數據,如用戶經常瀏覽的文字類型、經常搜索的關鍵字、注冊時登記信息的內容等,演算法系統可以將每個用戶的瀏覽記錄、瀏覽時間、留言、評論和轉發等行為進行關鍵字提取,最終形成用戶畫像,以便之後對用戶進行文章和視頻的精準推送。舉個例子,給喜歡閱讀「體育」的用戶標上「體育」標簽;給喜歡「娛樂」的用戶標上「娛樂」的標簽,這一步的作用是給用戶的興趣進行建模,包括用戶對文章和視頻的全局熱度、分類熱度,主題熱度,以及關鍵詞熱度等。熱度信息在大的推薦系統能夠解決新聞冷啟動問題,幫助新聞實現推送。
用戶分析還具有協同特徵,它可以在部分程度上幫助解決所謂演算法越推越窄的問題。協同特徵也就是「聯想式」的推送方法,並非只考慮用戶已有歷史,而是通過用戶行為分析不同用戶間相似性,比如點擊相似、興趣分類相似、主題相似、興趣詞相似,甚至向量相似,從而擴展模型的探索能力。根據用戶之間計算數據的相似程度,把用戶細化分類成為不同的目標群體,再向目標群體集中的推送其感興趣的新聞內容
內容分析和用戶分析是相輔相成的,如果沒有分析的文本標簽,無法得到用戶興趣標簽,沒有用戶的興趣標簽就無法給用戶定位實現精準推送。
3.3 推薦維度之三:環境分析
環境分析就是根據文章的時效性和接近性推送給相應的用戶,比如獲取用戶當前所在位置是否在旅遊區,這個可以通過獲取用戶的實時位置來實現。還會不斷與用戶之前經常出現的所在地進行對比等方式確認當前狀態,分析出用戶是在常住地區還是在旅行。這時若系統檢測到用戶正在泰山及周邊遊玩,則可能會相應推送泰山的相關文章、周邊的交通新聞和天氣信息等等。
通過上面三個推薦維度可以作為數據基礎,分析當前用戶處於什麼環境,結合用戶畫像以及文章的內容分類來推薦,盡量做到推送的內容都是用戶所感興趣的。演算法系統還會通過內容分類、分析抽取,把文本相似度高的文章,包括新聞主題、內容相似的文章進行消重,解決推送重復的問題,進一步對目標用戶進行精確且不重復的內容推薦。最後過濾質量低俗色情的內容,以免造成平台會有負面傾向。
3.4 「今日頭條」新聞推薦演算法的價值取向
3.4.1 「用戶為上」
「今日頭條」的演算法推送是站在用戶的立場上的,以滿足用戶個性化和推送的精準性,「今日頭條」也重新衡量了新聞價值標准:以用戶為上,用戶對新聞內容和閱讀方式的滿意度便是平台推送新聞的價值宗旨。傳統媒體時代,只有報紙和電視,有什麼受眾就得看什麼,而如今「今日頭條」根據用戶興趣去進行推送。演算法推送平台用戶范圍廣,很多用戶熱衷關注負面,也有許多用戶都有窺視欲和好奇心,喜歡無聊八卦和無聊新聞,而且在好奇心作用下用戶都有從眾心理。這使得生產者過度去迎合受眾,只要是用戶喜歡看就可以發表在「今日頭條」上。
3.4.2 「演算法主導」
「今日頭條」更注重技術分發,生產者是用戶,受眾者也是用戶,這樣一來內容監管和分發就很困難。演算法推送機制根據用戶愛好進行推送,這樣生產的內容快、也無疑會加速內容配送效率。在演算法推送模型中,用戶點擊頻率、閱讀時間、點贊評論以及轉發在演算法時代都是可以進行量化的目標。在這樣情況下生產的內容,想要獲得較大點擊率和推送率,需要標題才能吸引用戶,因為用戶在平台一眼能看到的就是標題和配圖。標題和配圖決定用戶是否會打開你的內容,這導致許多內容生產者在編輯新聞標題時陷入標題黨的怪圈,還有導致低俗內容的呈現,以製造沖突製造懸念貼標簽等方式引用戶點擊,意圖把自己的文章做成爆文。對於海量的信息內容,即使今日頭條數據和智能推薦做的再好,目前來說也難以抵擋海量的垃圾信息。
4.演算法推送新聞引發的倫理問題
在如今網路時代的傳播思維中,「用戶為上」、「演算法主導」的新聞價值取向已經在演算法聚合類平台成為了普遍,演算法推送技術作為吸引用戶的手段,搭建起一個充滿誘導的媒介環境,以此增加用戶對平台的粘性。演算法推送技術在獲取信息、傳播速度等方面與以往相比有著跨時代的進步,但與此同時,由於演算法推送技術的加入,衍生出新的倫理問題,並且日漸復雜化。
4.1 演算法推送引發的倫理問題
4.1.1 演算法推送過於機械化,沒有思考能力
單向的演算法推薦對用戶來說經常會帶來內容雜亂無章、信息量過大、信息價值低等問題。從邏輯講,演算法只是從關鍵字的檢索匹配來完成統計推薦,但對新聞報道或文學作品具有藝術性、專業性的內容來說,是不能保證推送的質量的。演算法方面,目前主要基於匹配檢索與統計,大部分都是個人關注的信息類型和標簽,難以達到較好的推送效果。一千個人眼裡有一千個哈姆雷特,但是計算機只有隻有一個。演算法技術過於注重機械化的統計,只根據關鍵詞來推薦用戶,對我們中國具有博大精深的中國文字文化底蘊,推薦演算法是遠遠不夠的。整個新聞客戶端顯得像是一個菜市場,沒有態度、沒有風格,閱讀感受單一化,呈現了碎片化的特點。新聞不只是讓用戶能夠了解身邊發生的新鮮事,還有宣傳正面思想和傳播正能量的作用,新聞應該還要給人們帶來新的思考。讓機器做出正確判斷很簡單,但是讓機器綜合心理學、社會學、乃至某細分領域內的規則做出判斷還要正確地引導受眾則很難,正如現在演算法技術還不能完成一篇富有人文性、文學性和批判性的深度報道,它止步在了碎片式的、表層的傳播范疇。
4.1.2 容易引起「信息繭房」效應
「信息繭房」這一概念是凱斯.桑斯坦在《信息烏托邦》一書中提出的。意指受眾在過度的信息自我選擇之中,這樣會降低接觸外界其他信息的可能,從而將自己的生活桎梏於蠶繭一般的「蠶房」中的現象。人們的信息領域會習慣性被自己的興趣引導,信息窄化帶來了受眾對信息接收的單一性,這種單一性的可能會使受眾陷入循環,加重受眾信息同質化。
在互聯網的普及初期,受眾主要是從主流媒體和門戶網站獲取新聞信息,主流媒體能夠保障新聞的質量;對於其他資訊的獲取,由於技術的限制,此時的繭房並沒有過度被放大,受眾是有適當的自主選擇性閱讀新聞的。但到了如今以智能技術的互聯網時代,情況發生了改變,信息繭房的現象越來越明顯,用戶被標簽的情況下,演算法系統進行大量的主動推送,使受眾被動地成為信息的接收者。用戶的閱讀興趣不可能涵蓋所有的知識領域,演算法分發的核心邏輯是根據用戶的行為數據來進行精確推薦的,但同時演算法又會自動過濾掉「不感興趣」「不認同」的信息,實現「看我想看,聽我想聽」。在此過程中,因為演算法技術的力量將用戶的信息選擇效果放大了倍數,進而將受眾困住在信息繭房當中,受眾也很難憑借自身力量打破繭房,甚至在不知覺中受到更多負面的影響。

4.1.3 演算法推送的「偽中立性」
客觀和全面是新聞倫理的基本要求,新聞從業者必須從可好信息源來獲取真實的信息,以客觀的態度反應現實。我們慣常認為,互聯網技術服務商是技術中立者,不需要承擔約束大眾媒體的社會責任,然而當信息把關人又新聞編輯轉變為演算法工程師,傳統的媒介倫理似乎已經失效。演算法具有商業傾向性,「中立性」是演算法平台用以逃避媒體責任的理由,給大眾媒介造成傳播亂象,如此一來更像是一場演算法平台「肆意妄為又不想負責」的詭辯。
演算法平台的信息源是經過選擇和過濾的,「頭條號」的內容占「今日頭條」整個信息系統的絕大部分,然而在「人人都可以做新聞人」的時代,頭條號平台是一個開放的網路媒介環境,存在大量的偏見和錯誤的認知。無論是「今日頭條」平台設立的演算法規則,還是其他爬蟲的抓取的關鍵詞,演算法系統的信息源很多是具有目的性的、有偏見和非客觀的信息,所以信息源不能直接作用於用戶。因此,篩選演算法系統的信息源與傳統的人工編輯相比較,范圍極廣且很難把關,若演算法被惡意利用,那麼使整個傳播系統將會被輕易控制。
4.1.4 演算法推送里的「議程設置」
原議程設置功能揭示的重要內涵是:「受眾對新聞的看法雖然被大眾媒體議程設置功能所主導,但其更深刻的是議程設置給大眾媒體新聞帶來放大與延伸,從而使受眾對新聞選擇做出能動性修正,讓受眾在滿足需求和媒介依賴中逐漸培養出的潛在認同感」。
推送演算法技術在互聯網平台的運用,使原來傳統媒體主導的議程設置過程發生了變化,伴隨著傳播權的轉移、公眾參與度的提高和信息量劇增等原因導致議程設置功逐漸能減弱。過往傳統新聞的內容是由編輯有選擇地進行報道後再呈現在受眾面前的,而個性化新聞推送是用戶自己來選擇看哪一方面的內容,而這一環節中,天然的技術賦權將傳播權從傳統媒體下放至平台的用戶,使得受眾和社會的連接無需依賴傳統媒介,新聞媒體作為把關人的作用和議程設置功能都在減弱。
4.2 演算法新聞治理缺陷下的演算法權利異化
演算法作為人工智慧的基石之一,是「一種有限、確定、有效並適合用計算機程序來實現的解決問題的方法,是計算機科學的基礎」。近年來,伴隨人工智慧深度學習演算法取得的重大突破和大數據時代的到來,人工智慧的應用場景不斷拓展,人工智慧時代正逐漸從想像成為現實。藉助於海量的大數據和具備強大計算能力的硬體設備,擁有深度學習演算法的人工智慧機器可以通過自主學習和強化訓練來不斷提升自身的能力,解決很多人類難以有效應對的治理難題。伴隨人工能演算法在國家和社會治理中重要性的日漸凸顯,國家和社會對於演算法的依賴也逐漸加深,一種新型的權力形態——演算法權力也隨之出現。
可以把演算法權利分為四種:數據主權、演算法設計權、研發的資本權和演算法控制權。由於前三種權利都是單向的、演算法開發者賦予演算法的權利,是屬於演算法開發者的,與演算法分發平台呈現的效果沒有直接的影響,所以本文將著重論述演算法控制權。
演算法控制權是雙向的,用戶是演算法技術數據行為的提供者,同時又是被演算法技術控制的受害者。例如我們看到「今日頭條」會通過推送演算法來監管用戶的發布和瀏覽行為,同時平台會通過演算法決策系統來實現內容的發布去引導用戶。演算法控制權當然是一種天然技術賦予的權利,但演算法控制權是在用戶提供數據行為的情況下才得以實現的,因此演算法控制權既存在內容生產權,同時有要尊重和保護演算法相對人的義務。
正因為如此,演算法技術被認為是一種雙刃劍,一方面演算法能夠做出精準的行為預測,可以為管理者提供非常好的循環干預機制;對於公共行為主體來說,可以通過對大數據的應用來解決社會治理問題,對於私人主體來說可以藉助數據來提供個性化和定製化的服務;另一方面,演算法技術存在著諸如利益和風險不對稱等問題,而且由於演算法技術發展的超前性,新科技的創造者具備不對稱的信息和技術優勢,能夠按照自身利益的需求來塑造在平台上的演算法推送邏輯和社會系統,這帶來了監管的不確定性。人們要通過集體行為去承擔社會責任,通過這樣的方式規制演算法權利,可以讓我們能夠對演算法分發系統的意義和價值得到更深刻的思考。

熱點內容
速騰超越版14有哪些配置 發布:2025-07-02 10:49:02 瀏覽:657
安卓手機高刷在哪裡 發布:2025-07-02 10:43:02 瀏覽:342
愛奇藝iphone緩存 發布:2025-07-02 10:38:00 瀏覽:841
南方次元的解壓 發布:2025-07-02 10:31:32 瀏覽:246
葉祖新編程 發布:2025-07-02 10:29:06 瀏覽:400
k4在哪裡下載安卓 發布:2025-07-02 10:15:32 瀏覽:909
魔獸腳本破解版 發布:2025-07-02 10:15:30 瀏覽:995
鋒雲7800伺服器無網路怎麼辦 發布:2025-07-02 10:03:53 瀏覽:1000
安卓哪個版本可以安裝sd卡 發布:2025-07-02 09:58:09 瀏覽:984
存儲包下行流量包 發布:2025-07-02 09:49:00 瀏覽:364